1.当使用new Array(10)
,实际上是创建一个空是数组对象,属性length =10
;
除此以外,这个对象是一个空对象。对象中并没有数组对应的索引键(index key)
。
const arr = new Array(10);
//arr (10) [empty × 10]
2.map
、reduce
、filter
、forEach
等高阶函数沿着数组的索引键遍历;
const arr = new Array(10);
arr.map(v=>{
console.log('v',v)
})
//并不会执行map的回调。
//map 对数组遍历时没有执行回调函数–就是因为索引键并不存在
const arr = new Array(10,20);
arr[5]=50;
arr.map(v=>{
console.log('v',v)
})
//10,20,50
3.解决办法
a.使用扩展运算符 ...
它对数组(或者任何可遍历对象)进行从 0 到数组长度的简单循环;
const arr = new Array(2);
[...arr].map(v=>{
console.log(v)
})
//undefined undefined
b.可以使用 Array.from({length:2})
const arr = Array.from({length:2})
arr.map(v=>{
console.log(v)
})
//undefined undefined