Set就是常见的集合,集合能够保证元素的唯一性,关于唯一性的确定,Set和Map都是用的SameValueZero内部函数,关于这点请参考Map章节。ES6规范的23.2章节描述了Set,有兴趣的自己去看。
下面看API介绍:
1)Set构造函数,可以不传任何参数,如果要传参数,参数必须是iterable的
let set = new Set(['red', 'green', 'blue']);
let s = new Set("foo","bar")//这里注意!最后集合中只会有'f'和'o',因为字符串是可以iterable的,Set构造函数会忽略第二个参数
console.log(s)//Set {"f", "o"}
仔细看上面的第二行代码
2)Set.prototype.add ( value ),返回this,可链式操作
var s = new Set();
var x = { id: 1 },y = { id: 2 };
s.add( x ).add( y ).add( x );
3)Set.prototype.has ( value ),检查集合中是否存在某值,存在返回true,否则返回false
4)Set.prototype.delete ( value ),删除集合中的元素,有返回true,否则返回false
5)Set.prototype.clear ( ),清空集合
6)Set.prototype.size,返回集合大小
7)Set.prototype.entries(),Set.prototype.keys(),Set.prototype.values()
上面这几个函数返回的都是iterator,不是数组,记住。
var s = new Set().add(0).add(1);
s.values()[0]//undefined
[...s.values()][0]//0
8)Set.prototype.forEach ( callbackfn [ , thisArg ] ),没啥可说的
*以上全部代码在Chrome 47下通过测试