持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情
Set对象
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。Set对象是值的集合,你可以按照插入的顺序迭代它的元素。Set 中的元素只会出现一次,即 Set 中的元素是唯一的。
实例方法
- add(value)方法,向在Set对象尾部添加一个元素。返回该Set对象。
- clear(),清空该Set对象里的值。
- delete(value),删除Set对象中与这个value相同的值 ,如果值存在并成功删除返回true否者返回false。
- entries(),返回一个新的迭代器对象,该对象包含Set对象中的按插入顺序排列的所有元素的值的 [value, value]数组。为了使这个方法和Map对象保持相似, 每个值的键和值相等。
- values(),返回一个新的迭代器对象,该对象包含Set对象中的按插入顺序排列的所有元素的值。
- has(value),返回一个布尔值,表示该值在 Set 中存在与否。
const set = new Set();
set.add(1),
set.add(3)
console.log(set); // [1,3]
console.log(set.entries()); // [{1=>1},{3=>3}]
// 数组去重
const numbers = [2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5]
console.log([...new Set(numbers)]) // [2, 3, 4, 5, 6, 7, 32]
WeakSet对象
WeakSet对象允许你将弱保持对象存储在一个集合中。如果传入一个可迭代对象作为参数,则该对象的所有迭代值都会被自动添加进生成的WeakSet对象中。null 被认为是 undefined。
Set和WeakSet的区别:
- 与Set相比,WeakSet只能是对象的集合,而不能是任何类型的任意值。
- WeakSet持弱引用:集合中对象的引用为弱引用。 如果没有其他的对WeakSet中对象的引用,那么这些对象会被当成垃圾回收掉。 这也意味着 WeakSet 中没有存储当前对象的列表。 正因为这样,WeakSet 是不可枚举的。
const wset = new WeakSet();
obj = {name:'jack'}
wset.add(obj), // wset = [0,{value:{name:'jack'}}]
Promise对象
Promise对象用于表示一个异步操作的最终完成(或失败)及其结果值。
Promise的静态方法:
- Promise.all(iterable):方法接收一个 promise 的 iterable 类型的输入,并且只返回一个Promise实例, 那个输入的所有 promise 的 resolve 回调的结果是一个数组。所有输入的 promise 的 resolve 回调都结束,或者输入的 iterable 里没有 promise 了的时候,才会调用all的resolve,reject 回调执行是,只要任何一个输入的 promise 的 reject 回调执行或者输入不合法的 promise 就会立即抛出错误,并且 reject 的是第一个抛出的错误信息。
var p = Promise.all([1,2,3, Promise.resolve(444)]);
// PromiseState:fulfilled,PromiseResult:[1,2,3,444]
var p2 = Promise.all([1,2,3, Promise.reject(555)]);
// PromiseState:rejected,PromiseResult:555
- Promise.any(iterable接收一个 promise 对象的集合,当其中的任意一个 promise 成功,就返回那个成功的 promise 的值。
var p = Promise.any([1,2,3, Promise.resolve(444)]);
// PromiseState:fulfilled,PromiseResult:1
- Promise.allSettled(iterable)等到所有 promise 都已敲定(每个 promise 都已兑现或已拒绝)。返回一个 promise,该 promise 在所有 promise 都敲定后完成,并兑现一个对象数组,其中的对象对应每个 promise 的结果。
var p2 = Promise.allSettled([1,2,3, Promise.reject(555)]);
// PromiseState:fulfilled,PromiseResult:[{status: 'fulfilled', value: 1},{status: 'fulfilled', value: 2},{status: 'fulfilled', value: 3},{status: 'rejected', reason: 555}]
- Promise.race(iterable)等到任意一个 promise 的状态变为已敲定。当 iterable 参数里的任意一个子 promise 成功或失败后,父 promise 马上也会用子 promise 的成功返回值或失败详情作为参数调用父 promise 绑定的相应处理函数,并返回该 promise 对象。