构造函数 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(),并且不存在由于参数不同而导致的重载。它的行为非常统一。