关于数组:如果我在JavaScript中更新引用变量,为什么实际对象会更新新值?

Why actual object updates with new values if I update reference variables In JavaScript?

假设我有一个对象名x,其值为x = { a: 'abc', b: 'jkl' }

现在我将这个对象x分配给var y = x的新局部变量y

var y值随新值y.a = 'pqr', y.b = 'xyz'变化时,var x对象自动更新为var y的新值{ a: 'pqr', b: 'xyz' }

这是一个很好的场景,但在某些情况下,我想防止这种情况发生。我怎样才能做到这一点?

你可以在这里找到这个的密码


在所描述的场景中,y得到一个新对象,x仍然存在。

不同的是,如果更新xy的某些属性,那么这两个属性都会使用更新引用同一个对象。

1
2
3
4
5
6
7
var x = { a: 'abc', b: 'jkl' };
    y = x;

y = { a: 'pqr', b: 'xyz' };

console.log(x);
console.log(y);


有两种方法可以防止这种情况:

1-Object.assign号:

1
2
3
4
5
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号:

1
2
3
4
5
var x = { a: 'abc', b: 'jkl' }
var y = { ...x };
y.a = 'modified';
console.log('x: ', x);
console.log('y: ', y);