奇怪的Javascript Array.prototype.constructor.apply行为

use*_*563 3 javascript

我有javascript数组的这种有线行为.我的目标是从另一个数组创建一个新数组.我的方法是遵循;

Array.prototype.constructor.apply(Array, [1,2])
Run Code Online (Sandbox Code Playgroud)

它创建了一个新的数组,其中包含2个元素[1,2],但工作正常,但是当我放置这样的东西时...

Array.prototype.constructor.apply(Array, [3])
Run Code Online (Sandbox Code Playgroud)

那就是创建一个包含一个元素的数组,即[3] ...它创建

[undefined,undefined,undefined]
Run Code Online (Sandbox Code Playgroud)

就是它创建了一个包含3个空元素的数组!! 知道为什么吗?以及如何以这种方式创建一个新的数组对象?

Tim*_*own 9

那是因为带有一个参数的Array构造函数n会生成一个包含n元素的数组.使用更多参数,它会按顺序创建一个由这些参数组成的数组.

其实你的代码是不是要求Array作为构造:Array.prototype.constructor.apply(Array, [3])更像Array(3)new Array(3).但是,Array有和没有相同的行为new.

这一切都引出了一个问题,当你可以使用数组文字时,为什么你首先要这样做.如果您正在尝试复制数组,则使用其slice方法是一种简单的方法:

var a = [1, 2];
var copy = a.slice(0);
Run Code Online (Sandbox Code Playgroud)