应用场景

    1. 想快速循环n次, 但是不想使用for/while循环
    1. new Array(100).forEach(a => a);行不通, v8会判断数组对象是否有下标, 来决定是否循环回调, 而new Array(100)生成的数组没有下标
         function InnerArrayEvery(f, receiver, array, length) {
             if (!IS_CALLABLE(f)) throw MakeTypeError(kCalledNonCallable, f);
      
             var is_array = IS_ARRAY(array);
             for (var i = 0; i < length; i++) {
                 if (HAS_INDEX(array, i, is_array)) {
                 var element = array[i];
                 if (!%_Call(f, receiver, element, i, array)) return false;
                 }
             }
             return true;
             }
      
           - 2.`new Array(100)`, 这样的数组没有下标
      
         var arr = new Array(4);
         '0' in arr;  // false
         var a = [1];
         '0' in a; // true
      

      遍历方法

    1. fill方法
    • 1.方法:

        // fill第一种
        new Array(100).fill(undefined).forEach((a, index) => console.log(index))
        // fill第二种
        [].fill.call(new Array(100), undefined).forEach((a, index) => console.log(index))
        // fill第三种
        Array.apply(null, { length: 100 }).fill(undefined)
        // fill第四种(lodash)
        _.fill(Array(100), 0);
        // 最后一种
        Array(100).fill(0).forEach((a, index) => console.log(index))
      
        1. apply, call区别
        1. Array和new Array区别
    • 2.兼容性: ie不支持 兼容性

    1. Int8Array: ES2017
    • 1.方法:

        new Int8Array(100).forEach((a, index) => console.log(index));
      
    • 2.兼容性: ie10及以上支持 兼容性

    1. join
    • 1.方法:

        new Array(101).join(0).split('').forEach((a, index) => console.log(index));
      
        1. 为啥是101
    • 2.兼容性: ie5.5及以上K支持 兼容性

    1. 析构
    • 1.方法:

        [...new Array(100)].map(_=>0).forEach((a, index) => console.log(index));
      
    • 2.兼容性: ie不支持 兼容性

      参考文章

    1. 一个空数组引发的血案
    1. JavaScript 怎么快速声明一个数组,长度为 100,元素全是 0?