Set 对象
set对象允许你储存任何类型的唯一值,无论是原始值或者是对象引用。
set对象是值的集合,所以set是不存在键的。你会发现set对象中并不存在get、set方法,只是存在add、has方法。
set对象是值的集合,你可以按照插入的顺序迭代它的元素。Set中的元素只会出现一次,即Set中的元素是唯一的。
值的相等
因为Set中的值总是唯一的,所以需要判断两个值是否相等。在ECMAScript规范的早期版本中,这不是基于和===操作符中使用的算法相同的算法。具体来说,对于Set,+0(+0严格相等于-0)和-0是不同的值。然而,在ECMAScript 2015规范中这点已被更改。换句话说,现在的浏览器在Set中认为+0 0 -0都是相同的。
另外,NaN和undefined都可以被存储在Set中,NaN之间被视为相同的值NaN被认为是相同的,尽管NaN !== NaN
**set**构造函数参数
set构造函数接收一个可迭代对象,可迭代对象内部的元素将成为Set对象的元素。
set对象中是不存在键的,虽然你在浏览器中会发现[[Entries]]属性中会存在0,1,2,3这种类似键名的东西。这只是浏览器给你展示出键值对的效果而已,实际上Set对象并不存在键。
const set = new Set(1); // 报错
const set = new Set([1, 2, 3, undefined, NaN, {}]);
console.log(set);

**Set**实例属性、实例方法
Set实例属性size:返回Set对象中值的个数。注意是[[Entries]]属性内部值的个数,并不是Set对象自身的属性个数。
Set实例方法:
add:在Set对象尾部添加一个元素。返回该set对象。clear:移除set对象内部的所有元素。delete:移除值为value的元素,并返回一个布尔值来表示是否移除成功。Set.prototype.has(value)会在此之后返回false。has:返回一个布尔值,表示该值在Set中存在与否。keys:与values()方法相同,返回一个新的迭代器对象,该对象包含set对象中的按插入顺序排列的所有元素的值。values:返回一个新的迭代对象,该对象包含set对象中的按插入顺序排列的所有元素的值。entries:返回一个新的迭代对象,该对象包含Set对象中的按插入顺序排列的所有元素的值的[value, value]数组。为了使这个方法和Map对象保持相似,每个值的键和值相同。因为set对象是不存在键的。forEach:按照插入的顺序,为Set对象中的每一个值调用一次callbackFn。如果提供了thisArg参数,回调中的this会是这个参数。
const set = new Set([1, 2, false, 'true', 'str']);
set.forEach((key, value) => {
console.log(key, value); // 1, 1 2, 2 false, false
});
1410

被折叠的 条评论
为什么被折叠?



