Set
Set
对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
Set
对象是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的。因为 Set 中的值总是唯一的,所以需要判断两个值是否相等。这和===操作符中使用的算法不同。对于 Set s,+0 (+0 严格相等于-0)和-0是不同的值。
另外,NaN
和undefined
都可以被存储在Set 中, NaN
之间被视为相同的值(NaN被认为是相同的,尽管 NaN !== NaN)。
静态属性
get Set[@@species]
- 构造函数用来创建派生对象.
实例属性
Set.prototype.size
- 返回 Set 对象中的值的个数,
size
的值是一个整数,表示Set
对象有多少条目。size
的集合访问函数是undefined
; 你不能改变这个属性。
实例方法
Set.prototype.add(value)
- 在
Set
对象尾部添加一个元素。返回该Set
对象。此方法可以链式调用,例如:mySet.add(5).add('some text')。重复的值不会被重复添加。
Set.prototype.clear()
- 移除
Set
对象内的所有元素。返回值是undefined。
Set.prototype.delete(value)
- 移除
Set
中与这个值相等的元素,或者说从set对象中移除指定的(value)元素。成功删除返回true
,否则返回false。
Set.prototype.entries()
- entries() 方法返回一个新的迭代器对象 ,这个对象的元素是类似 [value, value] 形式的数组,value 是集合对象中的每个元素,迭代器对象元素的顺序即集合对象中元素插入的顺序。由于集合对象不像 Map 对象那样拥有 key,然而,为了与 Map 对象的 API 形式保持一致,故使得每一个 entry 的 key 和 value 都拥有相同的值,因而最终返回一个 [value, value] 形式的数组。
-
var mySet = new Set(); mySet.add("foobar"); mySet.add(1); mySet.add("baz"); var setIter = mySet.entries(); console.log(setIter.next().value); // ["foobar", "foobar"] console.log(setIter.next().value); // [1, 1] console.log(setIter.next().value); // ["baz", "baz"]
Set.prototype.forEach(callbackFn[, thisArg])
- 按照插入顺序,为Set对象中的每一个值调用一次callBackFn,哪怕这个值是undefined。如果提供了
thisArg
参数,回调中的this
就是这个参数。 -
回调函数有三个参数:
- 元素的值
- 元素的索引
- 正在遍历的集合对象
但是由于集合对象中没有索引(keys),所以前两个参数都是
Set
中元素的值(values),之所以这样设计回调函数是为了和Map
以及Array
的forEach
函数用法保持一致。如果提供了一个
thisArg
参数给forEach
函数,则thisArg参数将会作为回调函数中的this
值。否则this
值为undefined
。回调函数中this
的绑定是根据函数被调用时通用的this
绑定规则来决定的。forEach
函数为集合对象中每个值都执行一次回调;它不会返回任何值。function logSetElements(value1, value2, set) { console.log("s[" + value1 + "] = " + value2); } new Set(["foo", "bar", undefined]).forEach(logSetElements); // logs: // "s[foo] = foo" // "s[bar] = bar" // "s[undefined] = undefined"
Set.prototype.has(value)
- 返回一个布尔值,表示该(value)值在
Set
中存在与否。 -
var mySet = new Set(); mySet.add('foo'); mySet.has('foo'); // 返回 true mySet.has('bar'); // 返回 false var set1 = new Set(); var obj1 = {'key1': 1}; set1.add(obj1); set1.has(obj1); // 返回 true set1.has({'key1': 1}); // 会返回 false,因为其是另一个对象的引用 set1.add({'key1': 1}); // 现在 set1 中有2条(不同引用的)对象了
Set.prototype.values()
- 返回一个新的迭代器对象,该对象包含
Set
对象中的(按插入顺序排列的)所有元素的值。
Set.prototype.keys()
(en-US)
与values()
方法相同,返回一个新的迭代器对象,该对象包含Set
对象中的(按插入顺序排列的)所有元素的值。
Set.prototype[@@iterator]()
- 返回一个新的迭代器对象,该对象包含
Set
对象中的按插入顺序排列的所有元素的值。