为什么我不能在JavaScript中将数组推入并在函数参数中使用?

3

为什么在下面的代码中b和c不相同?第2行语句执行的顺序是什么?

var a = [1,2];
var b = new Array(a.push(1)); //[undefined, undefined, undefined]
var c = new Array(a);         // [[1, 2, 1]]

你可以编写 new Array((a.push(1), a)),但这并不一定更容易理解。 - Felix Kling
2个回答

5
.push()函数返回的是数组的新长度,而不是数组本身。因此,b被初始化为一个有3个空元素的数组,因为在将1添加到数组a的末尾后,.push()返回了3。

2
个人认为,如果.push()返回数组本身,会更有用。 - Pointy

0

你也可以使用 slice 函数来克隆数组,作为构造函数的替代方法。如果你想让 a 保持不变,可以使用这种方式。

var a = [1,2];
var b = a.slice(); 
b.push(1);            // [[1, 2, 1]]
var c = b.slice();    // [[1, 2, 1]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接