gunhawk

gunhawk

Frontend Developer

Coding is part of my life, 加藤恵は大好き=。=

关于空数组foreach在Chrome里的那些事

作者: gunhawk时间: 2017-09-04javascript

最开始的写法

想法很native, 直接定义一个长度为N的数组遍历就好了

let arr = Array(N);
arr.foreach(elem => { // do something... });

运行程序, 发现并没有执行任何东西. 查看arr, 的确是长度为N的数组, 这究竟是为什么?

原因探究

经过一番googling, 终于在这里找到了解决方案和原因. 我就简单总结一下

Chromeforeach等方法的实现如下:

for (var i = 0; i < length; i++) {
      if (i in array) {
        var element = array[i];
        f(element, i, array);
      }
      //...
}

内部有使用到枚举对象属性的方法, 然而上述的arr是没有可枚举的属性的, 不妨可以试试

Object.keys(arr) // => []

更详细的内容请看derp的留言

于是有大神给出了解决方案

Array.apply(null, Array(N)).foreach(elem => { // do something... })

这样总算能用起来了, 看着也比较舒服, 嗯.....