我想创建一个与现有对象无关但最初与对象具有相同值的变量。这意味着,如果我更改新对象,它将不会影响旧值。
我尝试使用Object.assign({},oldObj)
,但如果我将值推送到对象中的数组项,它就不起作用。这是我的代码:
let oldObj = {X:10, Y:[]};
let newObj = Object.assign({},oldObj);
newObj.Y.push(3.29231994);
console.log(oldObj);
非常感谢任何帮助!
答案 0 :(得分:2)
您可以在该旧对象上使用JSON.parse(JSON.stringify())
来获取该副本的新副本,而无需任何参考:
let oldObj = {X:10, Y:[]};
let newObj = JSON.parse(JSON.stringify(oldObj));
newObj.Y.push(3.29231994);
console.log(oldObj);

如果您想要浅拷贝,请使用Object.assign({},a)
" deep"复制,使用JSON.parse(JSON.stringify(a))
答案 1 :(得分:1)
let oldObj = {X:10, Y:[]};
let newObj = JSON.parse(JSON.stringify(oldObj));
newObj.Y.push(3.29231994);
console.log(oldObj);

答案 2 :(得分:1)
您可以创建自己的deep
复制功能。
let oldObj = {X:10, Y:[]};
let newObj = copy(oldObj);
newObj.Y.push(3.29231994);
console.log(oldObj);
function copy(o) {
var output, v, key;
output = Array.isArray(o) ? [] : {};
for (key in o) {
v = o[key];
output[key] = (typeof v === "object") ? copy(v) : v;
}
return output;
}

建议不要使用JSON.parse(JSON.stringify())
方法,因为将此方法用于deep-copy
对象的最大问题是对象必须JSON
可序列化
答案 3 :(得分:0)
引用非基元的任何变量(或属性)实际上都是引用内存位置。因此,Arrays只是一种特殊类型的Object,它可以像其他对象一样有效地传递值。
如果要复制非基元,则必须执行深复制 - Object.assign
只能生成浅副本。< / p>