ES6

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
原文地址:https://www.cnblogs.com/dagaoxiaozheng/p/6606312.html