Javascript中的数组行为

时间:2018-04-10 05:44:23

标签: javascript arrays google-chrome

我尝试在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]

有人可以帮助我理解这一点。

2 个答案:

答案 0 :(得分:2)

这是因为在初始化/声明变量时,chrome会将变量赋值的值放在控制台中。这是预期的行为。

enter image description here

答案 1 :(得分:0)

JavaScript中的{p> Arraysobjects。因此,在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]