之前一直对这个没什么概念,直到遇到一个诡异的 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我开始怀疑人生,这不都是 undefined
吗,只是写法不一样罢了。
然后分别在 safari, firefox 和 node 中试验了下:
safari:
safarifirefox:
firefoxnode:
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
网友评论