我有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个空元素的数组!! 知道为什么吗?以及如何以这种方式创建一个新的数组对象?
那是因为带有一个参数的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)