我想生成一个给定长度的空数组并用一些数字填充它。生成具有四个连续数字元素的数组的一种方法是:
var x = Array.apply(null, {length: 4}).map(function(item, index){return index;})
Run Code Online (Sandbox Code Playgroud)
但当我看到时,Array.apply(null, {length: 4})我想我可以用它来代替它new Array(4),但事实并非如此。进行快速测试会产生以下结果:
>> console.log((new Array(4)))
<< [ <4 empty items> ]
>> console.log(Array.apply(null, {length: 4}))
<< [ undefined, undefined, undefined, undefined ]
Run Code Online (Sandbox Code Playgroud)
这意味着我可以.map后者但不能前者。
new Array那么Array.apply(null, {})我认为创建具有给定长度的数组对象之间有什么区别?
apply将上下文作为第一个参数,将类似数组的参数列表作为第二个参数。Array然后它以可迭代对象作为参数调用函数 ( )。
Array.apply(null, [1, 2])
// Same as
Array(1, 2)
// Or
[1, 2]
Run Code Online (Sandbox Code Playgroud)
现在,如果您将对象作为数组传递,它仍然会像这样迭代它:
function apply(context, args) {
for(var i = 0; i < args.length; i++) {
/*...*/ args[i];
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果您通过,{ length: 4 }它将迭代四次并作为undefined参数,因此结果如下:
Array.apply(null, { length: 4 })
// Same as
Array(undefined, undefined, undefined)
Run Code Online (Sandbox Code Playgroud)
因此,数组槽不为空,但它们是未定义的,并且由于map仅跳过空槽,因此它将遍历第二个数组的每个条目。
顺便说一句,同样可以实现更具可读性:
Array.from({length: 4 }, (_, i) => i)
// [0, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
408 次 |
| 最近记录: |