Apply your JS skills to key Mozilla projects as an MDN Fellow! http://mzl.la/MDNFellowship

mozilla

Revision 449765 of Set

  • Revision slug: JavaScript/Reference/Global_Objects/Set
  • Revision title: Set
  • Revision id: 449765
  • Created:
  • Creator: zhangyaochun1987
  • Is current revision? No
  • Comment

Revision Content

{{ fx_minversion_header("13") }}

{{ Non-standard_header() }}

{{ 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() {{ fx_minversion_inline("19") }}Removes all key/value pairs from mySet.
属性 描述
mySet.size

返回mySet中的元素个数.

{{ fx_minversion_inline("19") }}在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

浏览器兼容性

{{ CompatibilityTable() }}

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support {{ CompatNo() }} {{ CompatGeckoDesktop("13") }} {{ CompatNo() }} {{ CompatNo() }} {{ CompatNo() }}
iterable {{ CompatNo() }} {{ CompatGeckoMobile("17") }} {{ CompatNo() }} {{ CompatNo() }} {{ CompatNo() }}
Set.clear() {{ CompatNo() }} {{ CompatGeckoDesktop("19") }} {{ CompatNo() }} {{ CompatNo() }} {{ CompatNo() }}
Feature Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support {{ CompatNo() }} {{ CompatGeckoMobile("13") }} {{ CompatNo() }} {{ CompatNo() }} {{ CompatNo() }}
iterable {{ CompatNo() }} {{ CompatGeckoMobile("17") }} {{ CompatNo() }} {{ CompatNo() }} {{ CompatNo() }}
Set.clear() {{ CompatNo() }} {{ CompatGeckoMobile("19") }} {{ CompatNo() }} {{ CompatNo() }} {{ CompatNo() }}

相关链接

Revision Source

<p>{{ fx_minversion_header("13") }}</p>
<p>{{ Non-standard_header() }}</p>
<p>{{ warning("SpiderMonkey中的Set实现是一个原型,并且Set相关的API与语义规范都是不稳定的.SpiderMonkey的Set实现可能不符合最新的ES规范,可能随时会被修改.这是一个试验性质的特性,所以不要在生产环境中使用它.") }}</p>
<h2 id=".E6.A6.82.E8.BF.B0">概述</h2>
<p><code>一个Set对象允许你向里面存储任意类型的唯一值(不能重复)</code>, 不管是原始值还是对象值. 在Set中,判断两个值是否相等的算法与 ===运算符不同,该算法很特殊, 对于Set来说,<code>+0</code> (按照以往的经验与<code>-0是严格相等的</code>) 和<code>-0</code> 是两个不同的值,还有<code>NaN和另一个NaN是相同的值,不能同时存进一个Set中</code>.</p>
<h2 id="API">API</h2>
<table class="standard-table" style="border-spacing: 0px; margin: 0px 0px 1.286em;">
  <tbody>
    <tr>
      <th style="font-style: inherit;">Constructor</th>
      <th style="font-style: inherit;">描述</th>
    </tr>
    <tr>
      <td><code style="font-style: inherit;">new Set([iterable])</code></td>
      <td>
        <p>返回一个新的Set对象。如果有参数<a href="https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/for...of" style="line-height: inherit;" title="/en-US/docs/JavaScript/Reference/Statements/for...of">iterable object</a>传递,所有的元素会被添加到一个新的Set中去。</p>
      </td>
    </tr>
    <tr>
    </tr>
  </tbody>
</table>
<table class="standard-table">
  <tbody>
    <tr>
      <th>方法</th>
      <th>描述</th>
    </tr>
    <tr>
      <td><code>mySet.add(value)</code></td>
      <td>将 <code>value</code> 添加进 <code>mySet</code>, 返回 <code>undefined</code>.</td>
    </tr>
    <tr>
      <td><code>mySet</code><code>.delete(</code><code>value</code><code>)</code></td>
      <td>从 <code>mySet中删除</code><code>value</code> . 返回 <code>undefined</code>.</td>
    </tr>
    <tr>
      <td><code>mySet</code><code>.has(</code><code>value</code><code>)</code></td>
      <td>返回一个布尔值,表明<code>value</code>是否被包含在<code>mySet</code> 中.</td>
    </tr>
    <tr>
      <td><code>mySet.clear()</code></td>
      <td>{{ fx_minversion_inline("19") }}Removes all key/value pairs from <code>mySet</code>.</td>
    </tr>
    <tr>
      <th>属性</th>
      <th>描述</th>
    </tr>
    <tr>
      <td><code>mySet</code><code>.size</code></td>
      <td>
        <p>返回<code>mySet</code>中的元素个数.</p>
        {{ fx_minversion_inline("19") }}在Firefox 18及之前版本中,<code>size()</code>是个方法.从Firefox 19开始,成为了<code>size</code>属性.</td>
    </tr>
  </tbody>
</table>
<h3 id=".E4.BE.8B.E5.AD.90">例子</h3>
<pre class="brush: js">
var mySet = new Set();
&nbsp;
mySet.add(1);
mySet.add(5);
mySet.add("some text");
&nbsp;
mySet.has(1); // true
mySet.has(3); // false, 3没有被添加进这个set中
mySet.has(5);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // true
mySet.has(Math.sqrt(25));&nbsp; // true
mySet.has("Some Text".toLowerCase()); // true
&nbsp;
mySet.size; // 3
&nbsp;
mySet.delete(5); // 从这个set中删除5
mySet.has(5);&nbsp;&nbsp;&nbsp; // false,5已经被删除了
&nbsp;
mySet.size; // 2, 刚刚删除了一个元素
&nbsp;
// 遍历set中的元素
for (let item of mySet) console.log(item); // 按顺序打印出: 1, "some text"
&nbsp;
// 将一个set转换成数组
var myArr = [v for (v of mySet)]; // [1, "some text"]
&nbsp;
// 如果运行在一个HTML文档中,下面的代码也能正常工作
mySet.add(document.body);
mySet.has(document.querySelector("body")); // true</pre>
<h2 id=".E6.B5.8F.E8.A7.88.E5.99.A8.E5.85.BC.E5.AE.B9.E6.80.A7">浏览器兼容性</h2>
<p>{{ CompatibilityTable() }}</p>
<div id="compat-desktop">
  <table class="compat-table">
    <tbody>
      <tr>
        <th>Feature</th>
        <th>Chrome</th>
        <th>Firefox (Gecko)</th>
        <th>Internet Explorer</th>
        <th>Opera</th>
        <th>Safari</th>
      </tr>
      <tr>
        <td>Basic support</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatGeckoDesktop("13") }}</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatNo() }}</td>
      </tr>
      <tr>
        <td>iterable</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatGeckoMobile("17") }}</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatNo() }}</td>
      </tr>
      <tr>
        <td>Set.clear()</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatGeckoDesktop("19") }}</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatNo() }}</td>
      </tr>
    </tbody>
  </table>
</div>
<div id="compat-mobile">
  <table class="compat-table">
    <tbody>
      <tr>
        <th>Feature</th>
        <th>Android</th>
        <th>Firefox Mobile (Gecko)</th>
        <th>IE Mobile</th>
        <th>Opera Mobile</th>
        <th>Safari Mobile</th>
      </tr>
      <tr>
        <td>Basic support</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatGeckoMobile("13") }}</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatNo() }}</td>
      </tr>
      <tr>
        <td>iterable</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatGeckoMobile("17") }}</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatNo() }}</td>
      </tr>
      <tr>
        <td>Set.clear()</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatGeckoMobile("19") }}</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatNo() }}</td>
        <td>{{ CompatNo() }}</td>
      </tr>
    </tbody>
  </table>
</div>
<h2 id=".E7.9B.B8.E5.85.B3.E9.93.BE.E6.8E.A5">相关链接</h2>
<ul>
  <li><a class="link-https" href="https://bugzilla.mozilla.org/show_bug.cgi?id=697479">Map and Set bug at Mozilla</a></li>
  <li><a class="external" href="http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets">ECMAScript Harmony proposal</a></li>
</ul>
Revert to this revision