我最近发现,映射一个未初始化的数组似乎并没有像我期望的那样工作.使用此代码:
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项长,但没有什么,甚至没有在那里未定义...
这有点令人困惑.
有人可以向我解释一下吗?
Array.apply(null, Array(5))实际上用传入的第一个参数的值填充作为第二个参数传递的数组(或类似数组的对象),如MDN 文档中所示。
new Array(5)只是初始化一个数组,并将其长度属性设置为 的参数5。同样,正如MDN 文档中所示:
如果传递给构造函数的唯一参数是 0 到 2 32
Array-1(含)之间的整数,则这会返回一个新的 JavaScript 数组,其属性设置为该数字(注意:这意味着一个空槽数组,而不是具有实际值的槽)未定义的值)。lengtharrayLength
| 归档时间: |
|
| 查看次数: |
1023 次 |
| 最近记录: |