db.mongo.insert({name:'mongo'});
> var t=db.mongo.findOne();
> t{ "_id" : ObjectId("5141b98723616e67f947f356"), "name" : "mongo" }
> var d=t > d
{ "_id" : ObjectId("5141b98723616e67f947f356"), "name" : "mongo" }
> d.password=123123> d
{ "_id" : ObjectId("5141b98723616e67f947f356"), "name" : "mongo", "password" : 123}
> t{ "_id" : ObjectId("5141b98723616e67f947f356"), "name" : "mongo", "password" : 123}問題1var d = t是引用賦值嗎 如果是的話,怎么樣不使用引用賦值delete d.passwordtrue> d
{ "_id" : ObjectId("5141b98723616e67f947f356"), "name" : "mongo" }
> d.password=124124> d
{ "_id" : ObjectId("5141b98723616e67f947f356"), "name" : "mongo", "password" : 124, "password" : 124}問題2 我執行delete d.password返回 true 說明已經刪除,為什么我再執行d.password=124會執行兩次添加> d
{ "_id" : ObjectId("5141b98723616e67f947f356"), "name" : "mongo",
"password" : 124,
"password" : 124
}
2 回答

莫回無
TA貢獻1865條經驗 獲得超7個贊
第一個問題 ... 因為兩個條目有同樣的 ObjectId
所以視為是同一條 ...
雖然事實上不是引用賦值但你可以這么理解 ...
第二個問題無法復現所以不知 ...

料青山看我應如是
TA貢獻1772條經驗 獲得超8個贊
對的,這個是單純的Javascript語法的問題。在Javascript中是存在這個問題的。即深復制和淺復制的問題:
var cloneObj = function(obj){ var str, newobj = obj.constructor === Array ? [] : {}; if(typeof obj !== 'object'){ return; } else if(window.JSON){ str = JSON.stringify(obj), //系列化對象 newobj = JSON.parse(str); //還原 } else { for(var i in obj){ newobj[i] = typeof obj[i] === 'object' ? cloneObj(obj[i]) : obj[i]; } } return newobj; };
- 2 回答
- 0 關注
- 252 瀏覽
添加回答
舉報
0/150
提交
取消