为何JavaScript对象值发生改变?求解释输出变为20,2而非1,2的原因
为什么修改
y.a后,x.a的值变成了20? 这是个典型的JavaScript引用类型问题,我来给你掰扯清楚核心原因:
JavaScript里的对象属于引用类型,变量存储的不是对象本身,而是对象在内存中的地址(相当于一把“访问钥匙”)。咱们一步步拆解你的代码逻辑:
第一步:
var x = { a: 1, b: 2 };
这行在内存中创建了一个实体对象{ a:1, b:2 },变量x保存的是这个对象的内存地址——相当于拿到了打开这个对象的钥匙。第二步:
var y = x;
这里并没有复制出一个全新的对象,只是把x手里的那把“钥匙”复制给了y。现在x和y指向的是内存里同一个对象,就像两个人拿着同一扇房间的钥匙,打开门看到的是同一个空间。第三步:
y.a = 20;
你通过y这把钥匙找到对应的对象,修改了它的a属性值。因为x和y共享同一个对象,所以当你用x访问a属性时,看到的自然是修改后的20;而b属性没被改动,所以还是原来的2。
如果想让x和y各自拥有独立的对象,你需要手动复制对象,比如用这两种方法:
// 方法1:使用Object.assign创建浅拷贝 var y = Object.assign({}, x); // 方法2:使用展开运算符创建浅拷贝 var y = {...x};
这样修改y.a就不会影响x.a了,因为它们现在指向内存里两个完全独立的对象。
内容的提问来源于stack exchange,提问作者Kai Ye
相关产品推荐
相关产品推荐

