提问人:radek79 提问时间:1/24/2022 更新时间:1/24/2022 访问量:31
为什么 Object.assign 的行为与常规引用不同?
Why does Object.assign behave differently from regular references?
问:
如果我像第一个例子一样对一个对象进行简单的引用,那么我理解它的方式是 x.a 和 y.a 指向同一个地址,该地址的值为 1。当我将该地址的值更改为 2 时,x 和 y 中的值都会发生变化。
但在第二个示例中,我使用 Object.assign 来创建 y。 x 和 y 是不同的引用,但 x.a 和 y.a 都指向同一个地址。那么为什么当我改变x.a时,y.a在这种情况下没有改变呢?
// simple reference
var x = {a:1};
var y = x;
console.log(x === y); // true
console.log(x.a === y.a) // true
x.a = 2;
console.log(y.a); // 2
console.log('end first example');
// same example but with Oject.assign
var x = {a:1};
var y = Object.assign({}, x);
console.log(x === y); // false
console.log(x.a === y.a); // true, x.a and y.a point to the same address
x.a = 2;
console.log(y.a); // 1, I was expecting this to be 2
答: 暂无答案
评论
y
x
x.a
y.a
2
x = { a: { b: 2 } }; y = Object.assign({}, x); x.a.b = 1;
将向您显示与您期望的结果相似的结果。另请参阅 JavaScript 中没有可用的“通过引用传递”x = { a: 2 }; y = {a:2};
x.a == y.a
true