为了账号安全,请及时绑定邮箱和手机立即绑定

刚开始接触 不是很明白,希望有知道的说明下原因

刚开始接触 不是很明白,希望有知道的说明下原因

江户川乱折腾 2023-05-01 10:06:05
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 所以视为是同一条 ...

虽然事实上不是引用赋值但你可以这么理解 ...

第二个问题无法复现所以不知 ...


查看完整回答
反对 回复 2023-05-03
?
料青山看我应如是

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;
};
查看完整回答
反对 回复 2023-05-03
  • 2 回答
  • 0 关注
  • 173 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信