ES6 - Set
Set对象允许你存储任意类型的唯一值(不能重复),无论它是原始值或者是对象引用。
1.创建Set实例的两种方法
//1.
var sset = new Set();
sset.add('one');
sset.add(2);
sset.add('three');
//...
//2.
var sset= new Set(['one', 2, 'three']);
2.指的相等
值的相等规则:NaN 是与NaN是相同的(虽然NaN !== NaN),除此之外所有的值都根据'==='判断。
var sset= new Set();
sset.add(Number('aa111'));
sset.add(Number('bb222'));
sset.add('cc333'));
//Set {NaN, "cc333"}
3.Set属性
-
Set.length 属性length的值为0。
-
Set.prototype 表示Set构造器的原型。允许向所有Set对象添加新的属性。
4.Set实例 - 所有Set对象的实例都会继承Set.prototype。
属性
-
Set.prototype.constructor 返回创建给set实例的构造函数,默认是Set函数。
-
Set.prototype.size 返回Set对象的键值对的数量。
var sset = new Set(['one', 'two', 'three']);
console.log(sset.constructor); //function Set() { [native code] }
console.log(sset.size); //3
方法
var sset = new Set('one', 'two', 'three');
1.Set.prototype.add(value) 在Set对象尾部添加一个元素。返回该Set对象。
sset.add('four');
console.log(sset); //Set {"one", "two", "three", "four"}
2.Set.prototype.clear() 移除Set对象内的所有元素。
sset.clear();
console.log(sset.size); //0
3.Set.prototype.delete(value) 移除Set的中与这个值相等的元素,返回Set.prototype.has(value)在这个操作前会返回的值(即如果该元素存在,返回true,否则返回false)。Set.prototype.has(value)在此后会返回false。
console.log(sset.has('one')); //true
sset.delete('one');
console.log(sset.has('one')); //false
4.Set.prototype.entries() 返回一个新的迭代器对象,该对象包含Set对象中的按插入顺序排列的所有元素的值的[value, value]数组。为了使这个方法和Map对象保持相似, 每个值的键和值相等。
5.Set.prototype.forEach(callbackFn[, thisArg]) 按照插入顺序,为Set对象中的每一个值调用一次callBackFn。如果提供了thisArg参数,回调中的this会是这个参数。
sset.forEach(function(value, key, setObj) {
console.log(value + '---' + key + '---' + setObj);
//value - Set对象里每一个键值对的值
//key - Set对象里每一个键值对的键 === 值
//mapObj - Set对象本身
console.log(this); //this === window
});
sset.forEach(function(value, key, setObj) {
console.log(value + '---' + key + '---' + setObj);
console.log(this); //this === sset
}, sset)
6.Set.prototype.has(value) 返回一个布尔值,表示Map实例是否包含键对应的值。
sset.has('one'); // true
sset.has('fivr'); //false
7.Set.prototype.keys() 与values()方法相同,返回一个新的迭代器对象,该对象包含Set对象中的按插入顺序排列的所有元素的值。
sset.keys(); //SetIterator {"one", "two", "three"}
8.Set.prototype.values() 返回一个新的Iterator对象,它按插入顺序包含了Map对象中每个元素的值。
sset.values(); //SetIterator {"one", "two", "three"}
5.使用for..of方法迭代映射
var sset = new Set();
sset.add(1);
sset.add(2);
for (var value of sset) {
console.log(value);
}
// 1 2
for (var key of sset.keys()) {
console.log(key);
}
// 1 2
for (var value of sset.values()) {
console.log(value);
}
// 1 2