之前一直对这个没什么概念,直到遇到一个诡异的 bug ,然后慢慢追究,最终发现了 js 数组中的空位与undefined 的不同。
这道题是这样的,如何快速的生成一个长度为10,并且元素与索引一样的数组。
比如 [0, 1, 2, 3, 4, 5 ...]
下面是我的答案:
var arr = Array(10).fill(0).map((v, k) => k)
如果不加 fill 那一步操作就会得到一个空数组
当时感觉以为数组的 map 方法是因为数组元素是 undefined 才会被忽略的,看来我还是太天真。

image.png
然后我一脸懵逼, 紧接着到了下图:

image.png
我开始怀疑人生,这不都是 undefined 吗,只是写法不一样罢了。
然后分别在 safari, firefox 和 node 中试验了下:
safari:

safari
firefox:

firefox
node:

node
这下通过对比终于明朗了
Array(10) 产生的是 10 个数组空位,并不是 undefined, 是 chrome 浏览器误导了我们。
数组的 map filter forEach等方法只对空位忽略不会忽略undefined,所以
Array(10).fill(undefined).map((v,k) => k) 也会得到正确的结果。
还有个不错的方法是:
Array.from({length: 10}, (v, k) => k)
关于 Array.from 请参考文档Array.from
