美文网首页程序员让前端飞
js 中数组的 空位 与 undefined

js 中数组的 空位 与 undefined

作者: jackPan | 来源:发表于2017-07-19 10:05 被阅读0次

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

    相关文章

      网友评论

        本文标题:js 中数组的 空位 与 undefined

        本文链接:https://www.haomeiwen.com/subject/dgnkkxtx.html