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=123 123 > d { "_id" : ObjectId("5141b98723616e67f947f356"), "name" : "mongo", "password" : 123 } > t { "_id" : ObjectId("5141b98723616e67f947f356"), "name" : "mongo", "password" : 123 }
問題1
var d = t
是引用賦值嗎 如果是的話,怎麼樣不使用引用賦值
delete d.password true > d { "_id" : ObjectId("5141b98723616e67f947f356"), "name" : "mongo" } > d.password=124 124 > 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 }
剛開始接觸 不是很明白,希望有知道的說明下原因
第一個問題 ... 因為兩個條目有相同的
ObjectId
所以視為是同一條 ...雖然事實上不是引用賦值但你可以這麼理解 ...
第二個問題無法復現所以不知 ...
這不是ObjectId相同的問題,就是單純的javascript語法要求引用賦值。如果你想clone,看這個吧。 http://stackoverflow.com/questions/122102/most-efficient-way-to-clone-an-object
同樣沒有遇到第二個問題。
對的,這個是單純的Javascript語法的問題。在Javascript中是存在這個問題的。即深複製和淺複製的問題:
代碼轉自https://www.zhihu.com/question/23031215