gpt4 book ai didi

javascript - 复制对象后删除对象属性时的奇怪行为

转载 作者:搜寻专家 更新时间:2023-11-01 05:06:45 25 4
gpt4 key购买 nike

  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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com