第6章 集合引用类型

目录

6.1 Object

6.2 Array

6.2.1 创建数组

6.2.2 数组空位

6.2.3 数组索引

6.2.4 检测数组

6.2.5 迭代器方法

6.2.6 复制和填充方法 

6.2.7 转换方法

6.2.8 栈方法

6.2.9 队列方法

6.2.11 操作方法

6.2.12 搜索和位置方法

6.2.13 迭代方法

6.2.14 归并方法

6.3 定型数组

6.3.1 历史

6.3.2 ArrayBuffer

6.3.3 DataView

6.3.4 定型数组

6.4 Map

6.4.1 基本API

6.4.2 顺序与迭代 

6.4.3 选择Object还是Map

6.5 WeakMap

6.5.1 基本API

6.5.2 弱键

6.5.3 不可迭代键

6.5.4 使用弱映射

6.6 Set

6.6.1 基本API

6.6.2 顺序与迭代 

6.6.3 定义正式集合操作

6.7 WeakSet

6.7.1 基本API

6.7.2 弱值

6.7.3 不可迭代值

6.7.4 使用弱集合

6.8 迭代与扩展操作

6.9 小结


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 操作方法

  1. concat()方法可以在现有数组全部元素基础上创建一个新数组。
  2. slice()用于创建一个包含原有数组中一个或多个元素的新数组。
  3. splice()的主要目的是在数组中间插入元素,但有3种(删除、插入、替换)不同的方式使用这个方法。

6.2.12 搜索和位置方法

ECMAScript提供两类搜索数组的方法:按严格相等搜索和按断言函数搜索。

  1. 3个严格相等的搜索方法:indexOf()、lastIndexOf()和includes()。
  2. 按照定义的断言函数搜索数组,每个索引都会调用这个函数。断言函数的返回值决定了相应索引的元素是否被认为匹配。

6.2.13 迭代方法

  1.  every():对数组每一项都运行传入的函数,如果对每一项函数都返回true,则这个方法返回true。
  2. filter():对数组每一项都运行传入的函数,函数返回true的项会组成数组之后返回。
  3. forEach():对数组每一项都运行传入的函数,没有返回值。
  4. map():对数组每一项都运行传入的函数,返回由每次函数调用的结果构成的数组。
  5. 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

  1. 内存占用
  2. 插入性能
  3. 查找速度
  4. 删除性能

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。这些类型为组织应用程序数据和简化内存管理提供了新能力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值