目录
6.1 Object
6.2 Array
ECMAScript数组也是一组有序的数据,但跟其他语言不同的是,数组中每个槽位可以存储任意类型的数据。这意味着可以创建一个数组,它的第一个元素是字符串,第二个元素是数值,第三个是对象。ECMAScript数组也是动态大小的,会随着数据添加而自动增长。
6.2.1 创建数组
(1)Array构造函数
(2)数组字面量(array literal)表示法
(3)Array构造函数还有两个ES6新增的用于创建数组的静态方法:from()和of()。from()用于将类数组结构转换为数组实例,而of()用于将一组参数转换为数组实例。
6.2.2 数组空位
使用数组字面量初始化数组时,可以使用一串逗号来创建空位(hole)
注意 由于行为不一致和存在性能隐患,因此实践中要避免使用数组空位。如果确实需要空位,则可以显式地用undefined值代替。
6.2.3 数组索引
要取得或设置数组的值,需要使用中括号并提供相应值的数字索引。
6.2.4 检测数组
ECMAScript提供了Array.isArray()方法。这个方法的目的就是确定一个值是否为数组,而不用管它是在哪个全局执行上下文中创建的。
6.2.5 迭代器方法
在ES6中,Array的原型上暴露了3个用于检索数组内容的方法:keys()、values()和entries()。keys()返回数组索引的迭代器,values()返回数组元素的迭代器,而entries()返回索引/值对的迭代器:
6.2.6 复制和填充方法
批量复制方法copyWithin(),以及填充数组方法fill()。
6.2.7 转换方法
toLocaleString()、toString()和valueOf()方法。
6.2.8 栈方法
ECMAScript数组提供了push()和pop()方法,以实现类似栈的行为。
6.2.9 队列方法
使用shift()和push(),可以把数组当成队列来使用。
6.2.11 操作方法
- concat()方法可以在现有数组全部元素基础上创建一个新数组。
- slice()用于创建一个包含原有数组中一个或多个元素的新数组。
- splice()的主要目的是在数组中间插入元素,但有3种(删除、插入、替换)不同的方式使用这个方法。
6.2.12 搜索和位置方法
ECMAScript提供两类搜索数组的方法:按严格相等搜索和按断言函数搜索。
- 3个严格相等的搜索方法:indexOf()、lastIndexOf()和includes()。
- 按照定义的断言函数搜索数组,每个索引都会调用这个函数。断言函数的返回值决定了相应索引的元素是否被认为匹配。
6.2.13 迭代方法
- every():对数组每一项都运行传入的函数,如果对每一项函数都返回true,则这个方法返回true。
- filter():对数组每一项都运行传入的函数,函数返回true的项会组成数组之后返回。
- forEach():对数组每一项都运行传入的函数,没有返回值。
- map():对数组每一项都运行传入的函数,返回由每次函数调用的结果构成的数组。
- some():对数组每一项都运行传入的函数,如果有一项函数返回true,则这个方法返回true。
6.2.14 归并方法
ECMAScript为数组提供了两个归并方法:reduce()和reduceRight()。这两个方法都会迭代数组的所有项,并在此基础上构建一个最终返回值。reduce()方法从数组第一项开始遍历到最后一项。而reduceRight()从最后一项开始遍历至第一项。
6.3 定型数组
定型数组(typed array)是ECMAScript新增的结构,目的是提升向原生库传输数据的效率。
6.3.1 历史
略
6.3.2 ArrayBuffer
略
6.3.3 DataView
略
6.3.4 定型数组
略
6.4 Map
Map是一种新的集合类型,为这门语言带来了真正的键/值存储机制。
6.4.1 基本API
初始化之后,可以使用set()方法再添加键/值对。另外,可以使用get()和has()进行查询,可以通过size属性获取映射中的键/值对的数量,还可以使用delete()和clear()删除值。
6.4.2 顺序与迭代
与Object类型的一个主要差异是,Map实例会维护键值对的插入顺序,因此可以根据插入顺序执行迭代操作。
6.4.3 选择Object还是Map
- 内存占用
- 插入性能
- 查找速度
- 删除性能
6.5 WeakMap
ECMAScript 6新增的“弱映射”(WeakMap)是一种新的集合类型,为这门语言带来了增强的键/值对存储机制。与6.4是兄弟。
6.5.1 基本API
略
6.5.2 弱键
略
6.5.3 不可迭代键
略
6.5.4 使用弱映射
略
6.6 Set
ECMAScript 6新增的Set是一种新集合类型,为这门语言带来集合数据结构。
6.6.1 基本API
初始化之后,可以使用add()增加值,使用has()查询,通过size取得元素数量,以及使用delete()和clear()删除元素。
6.6.2 顺序与迭代
Set会维护值插入时的顺序,因此支持按顺序迭代。
6.6.3 定义正式集合操作
略
6.7 WeakSet
ECMAScript 6新增的“弱集合”(WeakSet)是一种新的集合类型,为这门语言带来了集合数据结构。WeakSet是Set的“兄弟”类型,其API也是Set的子集。
6.7.1 基本API
略
6.7.2 弱值
略
6.7.3 不可迭代值
略
6.7.4 使用弱集合
略
6.8 迭代与扩展操作
有4种原生集合类型定义了默认迭代器:
- Array
- 所有定型数组
- Map
- Set
这意味着上述所有类型都支持顺序迭代,都可以传入for-of循环;
这也意味着所有这些类型都兼容扩展操作符。(扩展操作符在对可迭代对象执行浅复制时特别有用)
6.9 小结
ECMAScript 6新增了一批引用类型:Map、WeakMap、Set和WeakSet。这些类型为组织应用程序数据和简化内存管理提供了新能力。