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 }
刚开始接触 不是很明白,希望有知道的说明下原因
最初の質問... 2 つのエントリは同じ
ObjectId
を持っているため、同じものとみなされます...実際には参照割り当てではありませんが、このように理解できます...
2番目の問題は再現できないのでわかりません...
これは、ObjectId に関する同じ問題であるか、単に JavaScript 構文で参照の割り当てが必要であるかのどちらかです。クローンを作成したい場合は、これを見てください。 http://stackoverflow.com/questions/122102/most-efficient-way-to-clone-an-object
2番目の問題にも遭遇していません。
はい、これは純粋に Javascript 構文の問題です。この問題は Javascript に存在します。つまり、深いコピーと浅いコピーの問題:
リーリーコードはhttps://www.zhihu.com/question/23031215から転送されました