diff --git a/files/zh-cn/web/javascript/reference/global_objects/set/@@iterator/index.md b/files/zh-cn/web/javascript/reference/global_objects/set/@@iterator/index.md index a13d853449b857..2e1e20f1622acc 100644 --- a/files/zh-cn/web/javascript/reference/global_objects/set/@@iterator/index.md +++ b/files/zh-cn/web/javascript/reference/global_objects/set/@@iterator/index.md @@ -5,23 +5,31 @@ slug: Web/JavaScript/Reference/Global_Objects/Set/@@iterator {{JSRef}} -**`@@iterator`** 属性的初始值和 {{jsxref("Set.prototype.values()", "values")}} 属性的初始值是同一个函数。 +{{jsxref("Set")}} 实例的 **`[@@iterator]()`** 方法实现了[可迭代协议](/zh-CN/docs/Web/JavaScript/Reference/Iteration_protocols)以允许 `Set` 对象被大多数期望可迭代对象的语法所使用,例如[展开语法](/zh-CN/docs/Web/JavaScript/Reference/Operators/Spread_syntax)和 {{jsxref("Statements/for...of", "for...of")}} 循环。它返回一个[集合迭代器对象](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Iterator),它会以插入顺序生成集合的值。 + +该属性的初始值与 {{jsxref("Set.prototype.values()")}} 属性的初始值是同一个函数对象。 {{EmbedInteractiveExample("pages/js/set-prototype-@@iterator.html")}} -## Syntax +## 语法 -```plain -mySet[Symbol.iterator] +```js-nolint +set[Symbol.iterator]() ``` -### Return value +### 参数 + +无。 + +### 返回值 -返回 `Set` **iterator** 函数,默认值是 {{jsxref("Set.prototype.values()", "values()")}} 函数。 +与 {{jsxref("Set.prototype.values()")}} 返回值相同:一个新的[可迭代迭代器对象](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Iterator),它会以插入顺序生成集合的值。 -## Examples +## 示例 -### Using `[@@iterator]()` +### 使用 for...of 循环进行迭代 + +请注意,通常你不需要直接调用此方法。`@@iterator` 方法的存在使得 `Set` 对象[可迭代](/zh-CN/docs/Web/JavaScript/Reference/Iteration_protocols#可迭代协议),而像 `for...of` 循环这样的迭代语法会自动调用此方法以获取用于循环的迭代器。 ```js const mySet = new Set(); @@ -29,14 +37,14 @@ mySet.add("0"); mySet.add(1); mySet.add({}); -const setIter = mySet[Symbol.iterator](); - -console.log(setIter.next().value); // "0" -console.log(setIter.next().value); // 1 -console.log(setIter.next().value); // Object +for (const v of mySet) { + console.log(v); +} ``` -### Using `[@@iterator]()` with `for..of` +### 手动控制迭代器 + +你仍然可以手动调用返回的迭代器对象的 `next()` 方法来获得最大程度的控制权。 ```js const mySet = new Set(); @@ -44,21 +52,26 @@ mySet.add("0"); mySet.add(1); mySet.add({}); -for (const v of mySet) { - console.log(v); -} +const setIter = mySet[Symbol.iterator](); + +console.log(setIter.next().value); // "0" +console.log(setIter.next().value); // 1 +console.log(setIter.next().value); // {} ``` -## Specifications +## 规范 {{Specifications}} -## Browser compatibility +## 浏览器兼容性 {{Compat}} -## See also +## 参见 +- {{jsxref("Set")}} - {{jsxref("Set.prototype.entries()")}} - {{jsxref("Set.prototype.keys()")}} - {{jsxref("Set.prototype.values()")}} +- {{jsxref("Symbol.iterator")}} +- [迭代协议](/zh-CN/docs/Web/JavaScript/Reference/Iteration_protocols) diff --git a/files/zh-cn/web/javascript/reference/global_objects/set/@@species/index.md b/files/zh-cn/web/javascript/reference/global_objects/set/@@species/index.md index 1a52e411f12db2..b52ea87e99dc59 100644 --- a/files/zh-cn/web/javascript/reference/global_objects/set/@@species/index.md +++ b/files/zh-cn/web/javascript/reference/global_objects/set/@@species/index.md @@ -5,29 +5,41 @@ slug: Web/JavaScript/Reference/Global_Objects/Set/@@species {{JSRef}} -**`Set[@@species]`** 访问器属性返回`Set`的构造函数。 +**`Set[@@species]`** 静态访问器属性是一个未使用的访问器属性,指定了如何复制 `Set` 对象。 + +## 语法 + +```js-nolint +Set[Symbol.species] +``` + +### 返回值 + +调用 `get @@species` 的构造函数的值(`this`)。返回值用于构造复制的 `Set` 实例。 ## 描述 -species 访问属性返回 `Set` 对象的默认构造函数。子构造函数或许会重载这个属性以至改变构造函数的赋值。 +`@@species` 访问器属性返回 `Set` 对象的默认构造函数。子类构造函数可以覆盖它以更改构造函数赋值。 + +> **备注:** 目前所有 `Set` 方法均未使用此属性。 ## 示例 -### 普通对象中的 Species +### 普通对象的 Species -species 属性返回默认的构造函数,它是`Set` 对象的构造函数: +`@@species` 属性返回默认构造函数,即 `Set` 的构造函数。 ```js -Set[Symbol.species]; // function Set() +Set[Symbol.species]; // 函数 Set() ``` -### 派生对象中的 Species +### 派生对象的 Species -在一个派生集合对象中 (比如你自定义的`MySet`集合), `MySet` 的 species 属性 是 `MySet` 构造函数。又或者,你想要重写它,让它能在你派生的类方法中能返回父级`Set` 对象: +在一个自定义的 `Set` 子类(如 `MySet`)的实例中,`MySet` 的 `species` 是 `MySet` 构造函数。但是,你可能希望覆盖它,以便在派生类方法中返回父 `Set` 对象: ```js class MySet extends Set { - // Overwrite MySet species to the parent Set constructor + // 用父类 Set 构造函数覆盖 MySet 的 species static get [Symbol.species]() { return Set; } @@ -42,7 +54,7 @@ class MySet extends Set { {{Compat}} -## 另见 +## 参见 - {{jsxref("Set")}} - {{jsxref("Symbol.species")}} diff --git a/files/zh-cn/web/javascript/reference/global_objects/set/set/index.md b/files/zh-cn/web/javascript/reference/global_objects/set/set/index.md index 894b42e44fce75..03074057704101 100644 --- a/files/zh-cn/web/javascript/reference/global_objects/set/set/index.md +++ b/files/zh-cn/web/javascript/reference/global_objects/set/set/index.md @@ -1,11 +1,11 @@ --- -title: Set() constructor +title: Set() 构造函数 slug: Web/JavaScript/Reference/Global_Objects/Set/Set --- {{JSRef}} -**`Set` 构造函数**能让你创建 `Set` 对象,其可以存储任意类型的唯一值,无论是[基本类型](/zh-CN/docs/Glossary/Primitive)或者对象引用。 +**`Set()`** 构造函数创建 {{jsxref("Set")}} 对象。 {{EmbedInteractiveExample("pages/js/set-prototype-constructor.html")}} @@ -21,7 +21,7 @@ new Set(iterable) ### 参数 - `iterable` {{optional_inline}} - - : 如果传递一个[可迭代对象](/zh-CN/docs/Web/JavaScript/Reference/Statements/for...of),它的所有元素将不重复地被添加到新的 `Set` 中。如果不指定此参数或其值为 `null`,则新的 `Set` 为空。 + - : 如果传入一个[可迭代对象](/zh-CN/docs/Web/JavaScript/Reference/Statements/for...of),它的所有元素将不重复地被添加到新的 `Set` 中。如果不指定此参数或其值为 `null`,则新的 `Set` 为空。 ### 返回值 @@ -52,5 +52,5 @@ mySet.add(o); ## 参见 -- [Polyfill of `Set` in `core-js`](https://github.com/zloirock/core-js#set) +- [`core-js` 中 `Set` 的 polyfill](https://github.com/zloirock/core-js#set) - {{jsxref("Set")}}