程序员让前端飞

js 中数组的 空位 与 undefined

2017-07-19  本文已影响0人  jackPan

之前一直对这个没什么概念,直到遇到一个诡异的 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

上一篇 下一篇

猜你喜欢

热点阅读