Array
数组创建
let arr1 = []
let arr2 = Array(3) // [empty × 3]
let arr3 = Array('3') // ["3"]
let arr4 = Array.of(3) // [3]
let arr5 = Array.of('3') // ['3']
let arr6 = Array.from({ length: 3 }) // [undefined, undefined, undefined]稀疏数组
空位的检测 in
//空位是没有任何值,可以用 in 运算符检测
let a = [, , ,] // [empty × 3]
0 in a // false造成稀疏数组的操作
delete 操作符
let b = [1, 2, 3]
delete b[0] // [empty, 2, 3]构造函数
let a = Array(3) // [empty × 3]在数组字面量中省略值
指定数组索引大于数组长度
指定数组长度大于当前数组长度
尽量避免创建和使用稀疏数组,因为在 ES6 之前的方法,对稀疏数组的处理存在很多不统一的地方
操作的不统一
ES5 对空位的处理很不一致了,大多数情况下会忽略空位
forEach(), filter(), reduce(), every() 和 some() 跳过空位
map() 会跳过空位,但会保留这个值
join() 和 toString() 会将空位视为 undefined,而 undefined 和 null 会被处理成空字符串
ES6 则是明确将空位转为 undefined
Array.from 方法会将数组的空位,转为 undefined
扩展运算符(...)也会将空位转为 undefined
copyWithin() 会连空位一起拷贝
fill() 会将空位视为正常的数组位置
for...of 循环也会遍历空位
entries()、keys()、values()、find()和 findIndex() 会将空位处理成 undefined
undefined 数组的正确创建方式
数组去重
入门
indexOf(IE8 及更早版本不支持)
filter(IE9+)
Object 的 key value
sort
ES6 Set
ES6 Map
Last updated