Set

非标准

Warning: SpiderMonkey中的Set实现是一个原型,并且Set相关的API与语义规范都是不稳定的.SpiderMonkey的Set实现可能不符合最新的ES规范,可能随时会被修改.这是一个试验性质的特性,所以不要在生产环境中使用它.

概述

一个Set对象允许你向里面存储任意类型的唯一值(不能重复), 不管是原始值还是对象值. 在Set中,判断两个值是否相等的算法与 ===运算符不同,该算法很特殊, 对于Set来说,+0 (按照以往的经验与-0是严格相等的) 和-0 是两个不同的值,还有NaN和另一个NaN是相同的值,不能同时存进一个Set中.

API

Constructor 描述
new Set([iterable])

返回一个新的Set对象。如果有参数iterable object传递,所有的元素会被添加到一个新的Set中去。

方法 描述
mySet.add(value) value 添加进 mySet, 返回 undefined.
mySet.delete(value) mySet中删除value . 返回 undefined.
mySet.has(value) 返回一个布尔值,表明value是否被包含在mySet 中.
mySet.clear()

从mySet中删除所有的key/value对.

属性 描述
mySet.size

返回mySet中的元素个数.

在Firefox 18及之前版本中,size()是个方法.从Firefox 19开始,成为了size属性.

例子

var mySet = new Set();
 
mySet.add(1);
mySet.add(5);
mySet.add("some text");
 
mySet.has(1); // true
mySet.has(3); // false, 3没有被添加进这个set中
mySet.has(5);              // true
mySet.has(Math.sqrt(25));  // true
mySet.has("Some Text".toLowerCase()); // true
 
mySet.size; // 3
 
mySet.delete(5); // 从这个set中删除5
mySet.has(5);    // false,5已经被删除了
 
mySet.size; // 2, 刚刚删除了一个元素
 
// 遍历set中的元素
for (let item of mySet) console.log(item); // 按顺序打印出: 1, "some text"
 
// 将一个set转换成数组
var myArr = [v for (v of mySet)]; // [1, "some text"]
 
// 如果运行在一个HTML文档中,下面的代码也能正常工作
mySet.add(document.body);
mySet.has(document.querySelector("body")); // true

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support Not supported 13 (13) Not supported Not supported Not supported
iterable Not supported 17.0 (17) Not supported Not supported Not supported
Set.clear() Not supported 19 (19) Not supported Not supported Not supported
Feature Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support Not supported 13.0 (13) Not supported Not supported Not supported
iterable Not supported 17.0 (17) Not supported Not supported Not supported
Set.clear() Not supported 19.0 (19) Not supported Not supported Not supported

相关链接

Document Tags and Contributors

Contributors to this page: ziyunfei, zhangyaochun1987
最后编辑者: zhangyaochun1987,