javascript基础系列之Set

javascript基础系列之Set

构造函数Set

1
2
3
4
// 构造函数Set
const set1 = new Set([1,2,3,4,5]);
console.log(set1.has(1)); // true
console.log(set1.has(6)); // false

静态属性

1
2
3
4
5
6
7
// 静态属性  Set[@@species] 可以重写species构造函数,不太清楚具体应用场景
console.log(Set[Symbol.species]); // ƒ Set() { [native code] }
class MySet extends Set {
static [Symbol.species]() { // 重写species指向Set构造函数
return Set;
}
}

实例属性

1
2
3
// Set.prototype.size  Set对象中值的个数
const set1 = new Set([1,2,3,4,5]);
console.log(set1.size); // 5

实例方法

Set.prototype.add

1
2
3
4
// Set.prototype.add 在Set对象尾部添加元素
const set1 = new Set([1,2,3]);
set1.add(7);
console.log(set1); // Set(4){1,2,3,7}

Set.prototype.clear

1
2
3
4
// Set.prototype.clear 清空Set对象中所有元素
const set2 = new Set([1,2,3]);
set2.clear();
console.log(set2); // Set(0){size: 0}

Set.prototype.delete

1
2
3
4
// Set.prototype.delete 移除Set中与该值相等的元素
const set3 = new Set([1,2,3]);
set3.delete(2);
console.log(set3); // Set(2){1,3}

Set.prototype.entries

1
2
3
// Set.prototype.entries 返回新的迭代器,键值相等。类似Array.prototype.entries
const set4 = new Set([5,6,7]);
console.log(set4.entries()); // SetIterator {5=>5,6=>6,7=>7}

Set.prototype.forEach

1
2
3
4
5
// Set.prototype.forEach(callback [, thisArg]) 为集合中每个元素执行回调函数,没有返回值,默认undefined
const set5 = new Set(["a", "b", "c"]);
set5.forEach((item)=> {
console.log("arr[" + item + "] = " + item); // arr[a]=a arr[b]=b arr[c]=c
});

Set.prototype.has

1
2
3
// Set.prototype.has  判断参数是否在Set中
const set6 = new Set("a", "b", "c");
console.log(set6.has('a')); // true

Set.prototype[keys|values]

1
2
3
4
// Set.prototype[keys|values] 返回新的迭代器对象,包含Set中所有的元素
const set7 = new Set(["a", "b", "c"]);
console.log(set7.keys()); // SetIterator {'a', 'b', 'c'}
console.log(set7.values()); // SetIterator {'a', 'b', 'c'}

Set.prototype[@@iterator]

1
2
3
4
5
// Set.prototype[@@iterator] 返回新的迭代器对象
const set1 = new Set([5,6,7]);
const iterator = set1[Symbol.iterator]();
console.log(iterator.next().value); // 5
console.log(iterator.next().value); // 6
参考文档

Set