2019-04-21 11:50:48 +08:00

141 lines
7.7 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<article id="wikiArticle">
<div></div>
<div> </div>
<p><strong><code>WeakSet</code></strong> 对象允许你将<em>弱保持对象</em>存储在一个集合中。</p>
<h2 id="语法">语法</h2>
<pre><code class="language-javascript"> new WeakSet([iterable]);</code></pre>
<h3 id="参数">参数</h3>
<dl>
<dt>iterable</dt>
<dd>如果传入一个<a href="Reference/Statements/for...of">可迭代对象</a>作为参数, 则该对象的所有迭代值都会被自动添加进生成的 <code>WeakSet</code> 对象中.</dd>
</dl>
<h2 id="描述">描述</h2>
<p><code>WeakSet</code> 对象是一些对象值的集合, 并且其中的每个对象值都只能出现一次.</p>
<p>它和 <a href="Reference/Global_Objects/Set" title="Set 对象允许你存储任何类型的唯一值无论是原始值或者是对象引用。"><code>Set</code></a> 对象的区别有两点:</p>
<ul>
<li><code>WeakSet</code> 对象中只能存放对象引用, 不能存放值, 而 <code>Set</code> 对象都可以.</li>
<li><code>WeakSet</code> 对象中存储的对象值都是被弱引用的, 如果没有其他的变量或属性引用这个对象值, 则这个对象值会被当成垃圾回收掉. 正因为这样, <code>WeakSet</code> 对象是无法被枚举的, 没有办法拿到它包含的所有元素.</li>
</ul>
<h2 id="Properties" name="Properties">属性</h2>
<dl>
<dt><code>WeakSet.length</code></dt>
<dd><code>length</code> 属性的值为 0.</dd>
<dt><a href="Reference/Global_Objects/WeakSet/prototype" title="The WeakSet.prototype property represents the prototype for the WeakSet constructor."><code>WeakSet.prototype</code></a></dt>
<dd><span><code>WeakSet</code> 实例的所有继承属性和继承方法都在该对象上.</span></dd>
</dl>
<h2 id="Boolean_instances" name="Boolean_instances"><code>WeakSet</code> 实例</h2>
<p>所有 <code>WeakSet</code> 实例都继承自 <a href="Reference/Global_Objects/WeakSet/prototype" title="The WeakSet.prototype property represents the prototype for the WeakSet constructor."><code>WeakSet.prototype</code></a>.</p>
<h3 id="属性">属性</h3>
<p></p><dl>
<dt><code>WeakSet.prototype.constructor</code></dt>
<dd>返回构造函数即 <a href="Reference/Global_Objects/WeakSet" title="WeakSet 对象允许你将弱保持对象存储在一个集合中。"><code>WeakSet</code></a> 本身.</dd>
</dl><p></p>
<h3 id="方法">方法</h3>
<p></p><dl>
<dt><a href="Reference/Global_Objects/WeakSet/add" title="add() 方法在 WeakSet 对象的最后一个元素后添加新的对象。"><code>WeakSet.prototype.add(value)</code></a></dt>
<dd> 在<span style="line-height: 1.5;">该 </span><code style="font-size: 14px;">WeakSet</code><span style="line-height: 1.5;"> 对象中添加一个新元素 <code>value</code>.</span></dd>
<dt><a href="Reference/Global_Objects/WeakSet/clear" title="clear() 方法用于删除 WeakSet 对象的所有元素,但是已经不是 ECMAScript 的一部分了。"><code>WeakSet.prototype.clear()</code></a></dt>
<dd>清空该 <code>WeakSet</code> 对象中的所有元素.</dd>
<dt><a href="Reference/Global_Objects/WeakSet/delete" title="delete() 方法从 WeakSet 对象中移除指定的元素。"><code>WeakSet.prototype.delete(value)</code></a></dt>
<dd><span style="line-height: 1.5;">该 </span><code style="font-size: 14px;">WeakSet</code><span style="line-height: 1.5;"> 对象中删除</span><span style="line-height: 1.5;"> </span><code style="font-size: 14px;">value </code><span style="line-height: 1.5;">这个元素, 之后 </span><code style="font-size: 14px;">WeakSet.prototype.has(value)</code><span style="line-height: 1.5;"> 方法便会返回 </span><code style="font-size: 14px;">false</code><span style="line-height: 1.5;">.</span></dd>
<dt><a href="Reference/Global_Objects/WeakSet/has" title="has() 方法根据 WeakSet 是否存在相应对象返回布尔值。"><code>WeakSet.prototype.has(value)</code></a></dt>
<dd>返回一个布尔值,  表示给定的值 <code>value</code> 是否存在于这个 <code>WeakSet</code> 中.</dd>
</dl><p></p>
<h2 id="示例">示例</h2>
<h3 id="例1_使用_WeakSet">例1: 使用 <code>WeakSet</code></h3>
<pre><code class="language-javascript">var ws = new WeakSet();
var obj = {};
var foo = {};
ws.add(window);
ws.add(obj);
ws.has(window); // true
ws.has(foo); // false, 对象 foo 并没有被添加进 ws 中
ws.delete(window); // 从集合中删除 window 对象
ws.has(window); // false, window 对象已经被删除了
ws.clear(); // 清空整个 WeakSet 对象
</code></pre>
<h2 id="规范">规范</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">规范链接</th>
<th scope="col">规范状态</th>
<th scope="col">备注</th>
</tr>
<tr>
<td><a class="external" href="https://www.ecma-international.org/ecma-262/6.0/#sec-weakset-objects" hreflang="en" lang="en" rel="noopener">ECMAScript 2015 (6th Edition, ECMA-262)<br/><small lang="zh-CN">WeakSet</small></a></td>
<td><span class="spec-Standard">Standard</span></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="浏览器兼容性">浏览器兼容性</h2>
<p></p><div class="blockIndicator warning"><strong><a class="external" href="https://github.com/mdn/browser-compat-data" rel="noopener">We're converting our compatibility data into a machine-readable JSON format</a></strong>.
This compatibility table still uses the old format,
because we haven't yet converted the data it contains.
<strong><a class="new" href="/zh-CN/docs/MDN/Contribute/Structures/Compatibility_tables" rel="nofollow">Find out how you can help!</a></strong></div>
<div class="htab">
<a id="AutoCompatibilityTable" name="AutoCompatibilityTable"></a>
<ul>
<li class="selected"><a>Desktop</a></li>
<li><a>Mobile</a></li>
</ul>
</div><p></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><span style="color: #888;" title="Please update this with the earliest version of support.">(Yes)</span></td>
<td><span style="color: #f00;">未实现</span> <a class="external" href="https://bugzilla.mozilla.org/show_bug.cgi?id=792439" rel="noopener" title="FIXED: Implement ES6 WeakSet">bug 792439</a></td>
<td><span style="color: #f00;">未实现</span></td>
<td><span style="color: #f00;">未实现</span></td>
<td><span style="color: #f00;">未实现</span></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><span style="color: #f00;">未实现</span></td>
<td><span style="color: #f00;">未实现</span> <a class="external" href="https://bugzilla.mozilla.org/show_bug.cgi?id=792439" rel="noopener" title="FIXED: Implement ES6 WeakSet">bug 792439</a></td>
<td><span style="color: #f00;">未实现</span></td>
<td><span style="color: #f00;">未实现</span></td>
<td><span style="color: #f00;">未实现</span></td>
</tr>
</tbody>
</table>
</div>
<h3 id="Chrome_备注">Chrome 备注</h3>
<ul>
<li>需在 <code>chrome://flags 中开启</code> “启用实验性 JavaScript” 才能使用该特性.</li>
</ul>
<h2 id="相关链接">相关链接</h2>
<ul>
<li><a href="Reference/Global_Objects/Set" title="Set 对象允许你存储任何类型的唯一值无论是原始值或者是对象引用。"><code>Set</code></a></li>
<li><a href="Reference/WeakMap" title="此页面仍未被本地化, 期待您的翻译!"><code>WeakMap</code></a></li>
</ul>
</article>