我尝试在Chrome开发者控制台中执行代码,我得到了这个奇怪的结果,但是我无法理解
var arr = [[2,2]];console.log('Array is',arr);arr[0] = [3,3]
执行此操作后得到的输出是
Array is [[3,3]]
作业应该在console.log
被执行后发生。但在此之前神奇地发生了。
澄清我尝试在JsBin中运行相同的代码。但是在JSBin中我得到了预期的
Array is [[2,2]]
然而,此代码会在chrome中产生预期结果
var arr = [2,2];console.log('Array is',arr);arr[0] = 3;console.log(arr)
输出
Array is [2,2] [3,2]
有人可以帮助我理解这一点。
答案 0 :(得分:2)
答案 1 :(得分:0)
Arrays
为objects
。因此,在arr[0]
在第一个console.log
引用的同一引用上分配数组后,var arr = [[2,2]];
赋值。两个arr
变量都指向同一个对象。
它只发生在对象上,而不是像数字这样的原始值。
原始值示例
var arr = 1;
console.log('Array is',arr); // 1
arr++;
console.log('Array is',arr); // 2
包含对象的示例:
var arr = [[2,2]];
console.log('Array is',arr);
arr[0] = [3,3]
为避免您可以使用此功能:
var arr = [[2,2]];
console.log('Array is', JSON.parse(JSON.stringify(arr)));
arr[0] = [3,3]