考虑我的对象名称x
的值为x = { a: 'abc', b: 'jkl' }
,
现在,我已x
将此对象y
分配给新的本地变量var y = x
。
当var y
值更改为新值 y.a = 'pqr', y.b = 'xyz'
时,var x
对象自动更新{ a: 'pqr', b: 'xyz' }
的{{1}}。
这是一个很好的场景,但在某些情况下我想阻止它。我怎样才能做到这一点?
您可以找到此here
的plunker代码答案 0 :(得分:1)
有两种方法可以防止这种情况:
1 - Object.assign
:
var x = { a: 'abc', b: 'jkl' }
var y = Object.assign({}, x);
y.a = 'modified';
console.log('x: ', x);
console.log('y: ', y);
2 - Spread operator
:
var x = { a: 'abc', b: 'jkl' }
var y = { ...x };
y.a = 'modified';
console.log('x: ', x);
console.log('y: ', y);
答案 1 :(得分:1)
在上述方案中,y
获取了一个新对象,x
仍然存在。
如果您更新x
或y
的某些属性,则会有所不同,然后两者都会使用更新引用相同的对象。
var x = { a: 'abc', b: 'jkl' };
y = x;
y = { a: 'pqr', b: 'xyz' };
console.log(x);
console.log(y);