Array
给 Array 构造函数传数值会创建初始 length 为 n 的数组
ES6 新增创建数组静态方法:
- from() —— 将类数组转换成数组实例
- of() —— 将一组参数转换成数组实例
console.log(Array.from('Shaun')) // [ 'S', 'h', 'a', 'u', 'n' ]
使用 length 属性可以方便地向数组末尾添加元素。因为每当一个新索引超过数组最大索引,数组长度会自动扩展到该索引值加 1
let colors = ['red', 'yellow', 'blue']
colors[colors.length] = 'black' // 位置3
colors[color.length] = 'white' // 位置4
复制和填充方法:
- copyWithin(targetIndex, startIndex, endIndex) —— 按照指定范围浅复制数组中部分内容,将它们插入到指定索引
- fill(val, startIndex, endIndex) —— 向数组插入全部或部分值
排序:
sort() 会在每一项调用 String() 转型函数再比较字符串来决定顺序,比较数值应该自定义函数。
定型数组
定义:包含数值类型的特殊数组。
ArrayBuffer 创建预分配内存,视图读写 ArrayBuffer。
一种视图是 DataView,需要用 new 操作符初始化实例,视图维护着对缓冲实例的引用。实例拥有 byteOffset 和 byteLength 属性,默认字节序为大端。
另一种视图是定型数组,它特定于一种 ElementType 且遵循系统原生的字节序。
定型数组可读限制写,所以它拥有 forEach,sort,keys 等方法,但不能调用 concat,push 等改变原数组内容的方法。需要修改内容用 set 方法。
Map
Map 可以用任何 JavaScript 数据类型作为键。
set 方法返回 Map 实例,因此可以把多个操作连缀起来。
Map 实例维护键值对的插入顺序,遍历的时候默认 entries() 为迭代器
选择上,给定固定大小内存,Map 大约可以比 Object 多存储 50% 的键值对;
Map 在浏览器中插入键值对稍快一些;
如果把 Object 当作数组使用情况下,浏览器可以优化,Object 好一些;
Object 中把属性设为 null 或 undefined 是伪删除,Map 的 delete 更快。
WeakMap
WeakMap 的键只能是 Object 或继承自 Object 的类型,且键不可迭代,也没有 clear 方法
Set
Set 可以包含任何 JavaScript 数据类型作为值
add 方法返回 Set 实例,因此可以把多个操作连缀起来
Set 实例维护值的插入顺序,遍历的时候默认 values() 为迭代器
WeakSet
WeakSet 的值只能是 Object 或继承自 Object 的类型,且值不可迭代,也没有 clear 方法