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 关注
- 173 浏览
添加回答
举报
0/150
提交
取消