myObj = {
prop1: 'alpha',
prop2: 'beta',
priceUpdatedOn: new Date()
};
myObjQuery = myObj;
delete myObjQuery.priceUpdatedOn;
console.log(myObj);
console.log(myObjQuery);
当我这样做时,priceUpdatedOn
也会出于某种原因从 myObj
中删除。知道为什么吗?
最佳答案
这是因为 myObjQuery 和 myObj 是同一个对象。当您执行 myObjQuery = myObj
时,您并不是在复制对象本身,而是在复制对它的引用。你从不直接操作 JavaScript 中的对象,而是总是通过引用。
编辑: 在 JavaScript 中克隆对象并不简单。大多数库(如 jQuery 或 Ext)都有办法做到这一点。要手动执行此操作,可以使用类似的方法。
var clone = {};
for(var prop in myObj) {
if(myObj.hasOwnProperty(prop)) {
clone[prop] = myObj[prop];
}
}
请记住,这是一个浅拷贝。要进行深拷贝,您需要检测属性本身是否是对象并递归地克隆它们。最好使用为您完成所有这些工作的图书馆。还要记住,这缺少很多边缘情况,以及对象的构造函数属性等奇怪的东西。 JavaScript 在这里真的很乱。
关于javascript - 复制对象后删除对象属性时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10153945/