Set 对象允许你存储任何类型的唯一值,无论是基本类型或者是对象引用。
在 JavaScript 中,基本类型(基本数值、基本数据类型)是一种既非对象也无方法或属性的数据。有 7 种原始数据类型:
Set 对象是值的集合,你可以按照插入的顺序迭代它的元素。
Set 中的元素只会出现一次,即 Set 中的元素是唯一的。
Set 数据类型不会添加重复的值。
Set 构造函数能让你创建 Set 对象,其可以存储任意类型的唯一值,无论是基本类型或者对象引用。
通过 new Set()
或 new Set(iterable)
创建一个新的 Set 实例。(返回一个新的 Set 对象)
// new Set():创建一个空Set
var set = new Set();
// new Set(iterable):创建一个带初始值的Set
// iterable:迭代对象
var set = new Set([1, 2, 3, 4, 5]);
备注: Set() 只能用 new 构建。试图在没有 new 的情况下调用它,会抛出 TypeError。
size
属性将会返回 Set 对象中元素的个数。
var set = new Set([1, 2, 3]);
console.log(set.size); // 3
size 的值是一个整数,表示 Set 对象有多少个元素。
size 的 set 访问函数是 undefined,即你不能改变这个属性。
通过 add(value)
方法向 Set 中添加指定元素。(返回一个新的 Set)
// add(value):向 Set 中添加指定元素
// value:指定元素
var set = new Set();
// 当 set 中没有指定元素时,添加指定元素
console.log(set.add(1)); // Set{ 0 => 1}
// 当 set 中存在指定元素时,不改变 set
console.log(set.add(1)); // Set{ 0 => 1}
通过 has(value)
判断指定元素是否存在于 Set 对象中。(返回布尔值)
// has(value):判断指定元素是否存在于 Set 对象中
// value:指定元素
var set = new Set([1]);
console.log(set.has(1)); // 若存在指定元素则返回 true
console.log(set.has(2)); // 若不存在指定元素则返回 false
通过 delete(value)
移除 Set 对象中的指定元素。(返回布尔值)
// delete(value):移除 Set 对象中的指定元素
// value:指定元素
var set = new Set([1]);
console.log(set.delete(1)); // 若 Set 对象中存在指定元素则返回 true
console.log(set.delete(1)); // 若 Set 对象中不存在指定元素则返回 false
若要移除的元素是引用数据类型(数组、对象等),则需要移除对应的地址,而不是值。
var set = new Set();
var obj = {
a: 1
}
set.add(obj);
console.log(set.delete({a: 1})); // 返回 false,表示移除失败,Set 对象中不存在该元素
console.log(set.delete(obj)); // 返回 true,表示移除成功,Set 对象中存在该元素
通过 clear()
移除 Set 对象中所有元素。(返回 undefined)
var set = new Set([1]);
console.log(set); // Set{ 0 => 1 }
console.log(set.clear()); // undefined
console.log(set); // Set{}
通过 keys()
获取 Set 对象的所有元素。(返回 SetIterator)
keys()
是values()
的别名,和values()
用法一致,详细看下面的values()
通过 values()
获取 Set 对象的所有元素。(返回 SetIterator)
var set = new Set([1, 2, 3]);
console.log(set.keys()); // SetIterator{0 => 1, 1 => 2, 2 => 3}
console.log(set.values()); // SetIterator{0 => 1, 1 => 2, 2 => 3}
通过 entries()
获取 Set 对象的所有元素,迭代器的每个元素为 [value, value]
的形式。(返回 SetIterator)
var set = new Set([1, 2, 3]);
console.log(set.entries()); // SetIterator{ 0 => [1, 1], 1 => [2, 2], 2 => [3, 3]}
var set = new Set([1, 2, 3]);
for (const item of set) {
console.log(item);
}
// 1
// 2
// 3
var set = new Set([1, 2, 3]);
set.forEach((item, index) => console.log(index + ' : ' + item));
// 1 : 1
// 2 : 2
// 3 : 3
注意:Set 对象并不是索引从1开始,而是 index 和 item 相等
如果对 forEach 有疑惑可以点击这里进行查看
var set = new Set([1, 2]);
// 获取迭代器
const iterator = set.values();
console.log(iterator.next().value); // 1
console.log(iterator.next().value); // 2