-
Symbol 是一种独特的且不可变的数据类型,经常用来标识对象属性
-
可迭代协议用来定义和自定义对象的迭代行为。也就是说在 ES6 中,你可以灵活地指定循环访问对象中的值的方式
-
迭代器方法(可通过常量
[Symbol.iterator]
获得)是一个无参数的函数,返回的是迭代器对象。迭代器对象是遵守迭代器协议的对象 -
迭代器协议用来定义对象生成一系列值的标准方式。实际上就是现在有了定义对象如何迭代的流程。通过执行
.next()
方法来完成这一流程 -
在 ES6 中,有一个新的内置对象的行为和数学意义上的集合相同,使用起来类似于数组。这个新对象就叫做“Set”。Set 与数组之间的最大区别是:Set 不基于索引,不能根据集合中的条目在集合中的位置引用这些条目;Set 中的条目不能单独被访问
-
根据值列表创建 Set,则使用数组,示例在创建 Set 时,会自动移除重复的条目
"Super Mario Bros."
const games = new Set(['Super Mario Bros.', 'Banjo-Kazooie', 'Mario Kart', 'Super Mario Bros.']); console.log(games); printer: Set {'Super Mario Bros.', 'Banjo-Kazooie', 'Mario Kart'}
-
创建 Set 后想要添加或删除条目,使用名称对应的
.add()
和.delete()
方法,想要删除 Set 中的所有条目,可以使用.clear()
方法 -
尝试向 Set 中
.add()
重复的条目,系统不会报错,但是该条目不会添加到 Set 中。此外,如果你尝试.delete()
Set 中不存在的条目,也不会报错,Set 保持不变 -
.add()
添加不管成功与否,都会返回该 Set 对象。另一方面,.delete()
则会返回一个布尔值,该值取决于是否成功删除 -
使用
.size
属性可以返回 Set 中的条目数。不能像数组那样通过索引访问 Set,因此要使用.size
属性,而不是.length
属性来获取 Set 的大小 -
.has()
方法可以检查 Set 中是否存在某个条目 -
检索所有值:使用
.values()
方法可以返回 Set 中的值。.values()
方法的返回值是SetIterator
对象 -
迭代器对象SetIterator
-
next()方法在迭代器对象上
-
Set 中的项目可用
for...of
循环访问 -
弱集合WeakSet
-
WeakSet 和普通 Set 有以下关键区别:WeakSet 只能包含对象、WeakSet 无法迭代,意味着不能循环访问其中的对象、WeakSet 没有
.clear()
方法const student1 = { name: 'James', age: 26, gender: 'male' }; const student2 = { name: 'Julia', age: 27, gender: 'female' }; const student3 = { name: 'Richard', age: 31, gender: 'male' }; const roster = new WeakSet([student1, student2, student3]); console.log(roster); print: WeakSet {Object {name: 'Julia', age: 27, gender: 'female'}, Object {name: 'Richard', age: 31, gender: 'male'}, Object {name: 'James', age: 26, gender: 'male'}}
-
如果将对象设为
null
,则本质上是删除该对象。当 JavaScript 的垃圾回收器运行时,该对象之前占用的内存将被释放,以便稍后在程序中使用。这种机制的好处在于你不用去担心要删掉对 WeakSet 中已删除对象的引用,JavaScript 会帮你删除!如果对象被删除,当垃圾回收器运行时,该对象也会从 WeakSet 中删除。这样的话,如果你想要一种高效、轻便的解决方法去创建一组对象,就可以使用 WeakSet -
映射 Map
-
Set 类似于数组,Map 就类似于对象,因为 Map 存储键值对,和对象包含命名属性及值相类似
-
Map 是一个可以存储键值对的对象,键和值都可以是对象、原始值或二者的结合
-
和 Set 不同,你无法使用值列表创建 Map;而是使用 Map 的
.set()
方法添加键值,.set()
方法有两个参数。第一个参数是键,用来引用第二个参数,即值const employees = new Map(); employees.set('james.parkes@udacity.com', { firstName: 'James', lastName: 'Parkes', role: 'Content Developer' }); employees.set('julia@udacity.com', { firstName: 'Julia', lastName: 'Van Cleve', role: 'Content Developer' }); employees.set('richard@udacity.com', { firstName: 'Richard', lastName: 'Kalehoff', role: 'Content Developer' }); console.log(employees); print: Map {'james.parkes@udacity.com' => Object {...}, 'julia@udacity.com' => Object {...}, 'richard@udacity.com' => Object {...}}
-
要移除键值对,只需使用
.delete()
方法 -
可以使用
.clear()
方法从 Map 中删除所有键值 -
使用
.set()
向 Map 中添加键已存在的键值对,不会收到错误,但是该键值对将覆盖 Map 中的现有键值对。此外,如果尝试使用.delete()
删除 Map 中不存在的键值,不会收到错误,而 Map 会保持不变 -
如果成功地删除了键值对,
.delete()
方法会返回true
,失败则返回false
。.set()
如果成功执行,则返回Map
对象本身 -
构建 Map 后,可以使用
.has()
方法并向其传入一个键来检查 Map 中是否存在该键值对 -
可以通过向
.get()
方法传入一个键,检索 Map 中的值 -
在 Map 上使用
.keys()
和.values()
方法将返回新的迭代器对象,叫做MapIterator
。你可以将该迭代器对象存储在新的变量中,并使用.next()
循环访问每个键或值。你所使用的方法将决定迭代器是否能够访问 Map 的键或值 -
WeakMap 和普通 Map 很像,但是具有以下关键区别:WeakMap 只能包含对象作为键、WeakMap 无法迭代,意味着无法循环访问、WeakMap 没有
.clear()
方法 -
可以像创建普通 Map 那样创建 WeakMap,但是需要使用
WeakMap
构造函数const book1 = { title: 'Pride and Prejudice', author: 'Jane Austen' }; const book2 = { title: 'The Catcher in the Rye', author: 'J.D. Salinger' }; const book3 = { title: 'Gulliver's Travels', author: 'Jonathan Swift' }; const library = new WeakMap(); library.set(book1, true); library.set(book2, false); library.set(book3, true); console.log(library);
-
WeakMap 通过专门处理对象作为键来利用这一点。如果将对象设为
null
,则本质上是删除该对象。当 JavaScript 的垃圾回收器运行时,该对象之前占用的内存将被释放,以便稍后在程序中使用 -
JavaScript Promise 是用新的 Promise()函数 -
new Promise()
创建而成的 -
promise 使你能够展开一些可以异步完成的工作,并回到常规工作。它通过向初始函数中传入两个函数来实现这一点,通常我们将这两个函数称为
resolve
和reject
new Promise(function (resolve, reject) { window.setTimeout(function createSundae(flavor = 'chocolate') { const sundae = {}; // 请求冰淇淋 // 得到锥形蛋筒 // 加热冰淇淋 // 舀一大勺到蛋筒里! if ( /* iceCreamConeIsEmpty(flavor) */ ) { reject(`Sorry, we're out of that flavor :-(`); } resolve(sundae); }, Math.random() * 2000); });
-
resolve
方法用来表示请求已完成,并且成功完成了请求,如果请求无法完成,则使用reject
方法 -
Promise 将立即返回一个对象,该对象上具有一个
.then()
方法,我们可以让该方法通知我们 promise 中的请求成功与否。.then()
方法会接收两个函数:请求成功完成时要运行的函数、请求失败时要运行的函数const myPromiseObj = new Promise(function (resolve, reject) { // 圣代创建代码 }); mySundae.then(function(sundae) { console.log(`Time to eat my delicious ${sundae}`); }, function(msg) { console.log(msg); self.goCry(); // 不是一个真正的方法 });
ES6内置功能杂记
最新推荐文章于 2021-10-06 15:18:52 发布