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
}
刚开始接触 不是很明白,希望有知道的说明下原因
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
第一个问题 ... 因为两个条目有同样的
ObjectId所以视为是同一条 ...虽然事实上不是引用赋值但你可以这么理解 ...
第二个问题无法复现所以不知 ...
这不是ObjectId相同的问题,就是单纯的javascript语法要求引用赋值。如果你想clone,看这个吧。 http://stackoverflow.com/questions/122102/most-efficient-way-to-clone-an-object
同样没有遇到第二个问题。
对的,这个是单纯的Javascript语法的问题。在Javascript中是存在这个问题的。即深复制和浅复制的问题:
代码转自https://www.zhihu.com/question/23031215