`new Array(5).map()`如何工作?

Roa*_*ers 6 javascript arrays

我最近发现,映射一个未初始化的数组似乎并没有像我期望的那样工作.使用此代码:

function helloMap(value, index) {
    return "Hello " + index;
}

console.clear();

var initialArray = Array.apply(null, new Array(5));

console.log("Array initialised with apply:");
console.log(initialArray);
console.log(initialArray.map(helloMap));

var normalArray = new Array(5);

console.log("Array constructed normally");
console.log(normalArray);
console.log(normalArray.map(helloMap));
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper {
  max-height: 100% !important;
}
Run Code Online (Sandbox Code Playgroud)

尽管每个阵列的第一个输出是,但我得到了不同的结果[undefined, undefined, undefined, undefined, undefined].

我得到不同结果的事实意味着undefined这两个数组实际上是不同的.在第一个我怀疑该数组有5个项目,每个都是未定义的.在第二个数组是5项长,但没有什么,甚至没有在那里未定义...

这有点令人困惑.

有人可以向我解释一下吗?

jef*_*ll2 5

Array.apply(null, Array(5))实际上用传入的第一个参数的值填充作为第二个参数传递的数组(或类似数组的对象),如MDN 文档中所示。

new Array(5)只是初始化一个数组,并将其长度属性设置为 的参数5同样,正如MDN 文档中所示:

如果传递给构造函数的唯一参数是 0 到 2 32Array -1(含)之间的整数,则这会返回一个新的 JavaScript 数组,其属性设置为该数字(注意:这意味着一个空槽数组,而不是具有实际值的槽)未定义的值)。lengtharrayLength


归档时间:

查看次数:

1023 次

最近记录:

8 年,8 月 前