数组常用总结

64 阅读2分钟

构造函数 Array()

Array构造函数不要求带上new 关键字,系统会自动补全

var a = Array(1,2,3) => [1, 2, 3]
var a = new Array(1,2,3) => [1, 2, 3]
var a = [1, 2, 3]
// 三者效果一致

空单元数组

  • 如果Array(args) 只传一个参数时,会被默认为数组的预设长度,从而创建了一个空单元数组
var a = new Array(3) => 【empty * 3
  • 空单元数组不会执行map方法,因为数组中不存在任何单元,所以无法遍历
  • join可以正常执行,因为join是循环数组的长度

稀疏数组:

我们将包含至少一个空单元(empty)的数组称为 稀疏数组

	var a = [1,2]
	a.length = 3 => 稀疏数组 [1,2,empty]
	var b = [1,2]
	delete b[1] => 【1, empty】

创建undefined单元数组

var a = Array.apply(null, {length: 3}) 
a; => [undefined, undefined, undefined]

此处 {length: 3} 是类数组对象

forEach

    arr.forEach(callback(currentValue [, index [, array]])[, thisArg])
    // thisArg 可选 作为回调函数的this
  • 针对 promise 或 async 函数的使用备注 :
          let ratings = [5, 4, 5];
    
          let sum = 0;
    
          let sumFunction = async function (a, b) {
              return a + b;
          }
    
          ratings.forEach(async function(rating) {
              sum = await sumFunction(sum, rating);
              console.log(sum)
          })
    
          console.log(sum); => 优先异步回调执行 
    
          // forEach 不会等待异步方法执行,因为forEach是when循环的封装,
    
  • forEach实现原理:

    while (k < len) {
        var kValue;
        if (k in O) {
            kValue = O[k];
                callback.call(T, kValue, k, O); // 此处没有异步,因此不会等待callBack中的异步事件
            }
        k++;
        }
    

Array.from方法

Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)。

  • 扩展运算符背后调用的是遍历器接口(Symbol.iterator),如果一个对象没有部署这个接口,就无法转换
  • Array.from方法还支持类似数组的对象。所谓类似数组的对象,本质特征只有一点,即必须有length属性

Array.of

Array.of()方法用于将一组值,转换为数组。

Array.of(3, 11, 8) // [3,11,8]
Array.of(3) // [3]
  • Array.of()基本上可以用来替代Array()或new Array(),并且不存在由于参数不同而导致的重载。它的行为非常统一。