如果:
var x = [1, 2, 3];
var y = [4, 5, 6]
;
var z = x;
然后是z[2] = y[0]
;
为什么console.log(x);
是[1, 2, 4]
而不是[1, 2, 3]
?
答案 0 :(得分:2)
执行var z = x;
时,您没有创建一个完全独立于x的新数组,而只是创建对原始数组的引用。因此,两者都发生了变化。
如果要创建新对象,可以使用新的ES6扩展运算符
var z = {...x};
请查看此answer,以获得有关按引用和值传递的更深入说明。
答案 1 :(得分:1)
Cuz the' z'变量是一个指向同一数组的指针,即' x'指向。
答案 2 :(得分:0)
JavaScript中的数组也是object
,变量只将 reference
保存到对象,而不是对象本身。因此,两个变量都引用相同的对象。所以通过一个变量在其他变量中反映也是如此。
var x = [1, 2, 3];
var y = [4, 5, 6];
var z = x;
z[2]=y[0];
console.log(x);
var w=Object.assign([],x);
w[0]=y[1];
console.log(x);
console.log(w);

看一下这个例子。如果您想要更改新变量,并且不希望在原始变量中反映出更改,而不是使用Object.assign
。