From 01b0e12ba27b5069248fd09235e9a7143915ee30 Mon Sep 17 00:00:00 2001 From: Irvin Date: Wed, 16 Feb 2022 02:02:49 +0800 Subject: remove `notranslate` class in zh-CN --- .../reference/iteration_protocols/index.html | 30 +++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'files/zh-cn/web/javascript/reference/iteration_protocols/index.html') diff --git a/files/zh-cn/web/javascript/reference/iteration_protocols/index.html b/files/zh-cn/web/javascript/reference/iteration_protocols/index.html index 975c55a7fe..d55dfd4111 100644 --- a/files/zh-cn/web/javascript/reference/iteration_protocols/index.html +++ b/files/zh-cn/web/javascript/reference/iteration_protocols/index.html @@ -84,7 +84,7 @@ translation_of: Web/JavaScript/Reference/Iteration_protocols

这样做允许一个迭代器能被各种需要可迭代对象的语法所使用。因此,很少会只实现迭代器协议,而不实现可迭代协议。

-
var myIterator = {
+
var myIterator = {
     next: function() {
         // ...
     },
@@ -96,13 +96,13 @@ translation_of: Web/JavaScript/Reference/Iteration_protocols
 
 

{{jsxref("String")}} 是一个内置的可迭代对象:

-
let someString = "hi";
+
let someString = "hi";
 typeof someString[Symbol.iterator];          // "function"
 

String 的默认迭代器会依次返回该字符串的各码点(code point):

-
let iterator = someString[Symbol.iterator]();
+
let iterator = someString[Symbol.iterator]();
 iterator + "";                               // "[object String Iterator]"
 
 iterator.next();                             // { value: "h", done: false }
@@ -111,11 +111,11 @@ iterator.next();                             // { value: undefined, done: true }
 
 

一些内置的语法结构——比如{{jsxref("Operators/Spread_operator", "展开语法")}}——其内部实现也使用了同样的迭代协议:

-
[...someString]                              // ["h", "i"]
+
[...someString]                              // ["h", "i"]

我们可以通过提供自己的 @@iterator 方法,重新定义迭代行为:

-
// 必须构造 String 对象以避免字符串字面量 auto-boxing
+
// 必须构造 String 对象以避免字符串字面量 auto-boxing
 var someString = new String("hi");
 someString[Symbol.iterator] = function() {
   return { // 只返回一次元素,字符串 "bye",的迭代器对象
@@ -134,7 +134,7 @@ someString[Symbol.iterator] = function() {
 
 

注意重新定义的 @@iterator 方法是如何影响内置语法结构的行为的:

-
[...someString];                              // ["bye"]
+
[...someString];                              // ["bye"]
 someString + "";                              // "hi"
 
@@ -148,7 +148,7 @@ someString + ""; // "hi"

我们可以实现一个自己的可迭代对象,就像这样:

-
var myIterable = {};
+
var myIterable = {};
 myIterable[Symbol.iterator] = function* () {
     yield 1;
     yield 2;
@@ -168,7 +168,7 @@ myIterable[Symbol.iterator] = function* () {
  
  • {{jsxref("WeakSet", "new WeakSet([iterable])")}}
  • -
    new Map([[1, 'a'], [2, 'b'], [3, 'c']]).get(2); // "b"
    +
    new Map([[1, 'a'], [2, 'b'], [3, 'c']]).get(2); // "b"
     
     let myObj = {};
     
    @@ -200,7 +200,7 @@ new WeakSet(function* () {
     
     

    一些语句和表达式需要可迭代对象,比如 {{jsxref("Statements/for...of", "for...of")}} 循环、{{jsxref("Operators/Spread_syntax", "展开语法")}}、{{jsxref("Operators/yield*", "yield*")}},和{{jsxref("Operators/Destructuring_assignment", "解构赋值")}}。

    -
    for(let value of ["a", "b", "c"]){
    +
    for(let value of ["a", "b", "c"]){
         console.log(value);
     }
     // "a"
    @@ -226,7 +226,7 @@ a // "a"
     
     

    使用这样的可迭代对象很可能会导致如下的运行时(runtime)异常,或者不可预料的表现:

    -
    var nonWellFormedIterable = {}
    +
    var nonWellFormedIterable = {}
     nonWellFormedIterable[Symbol.iterator] = () => 1
     [...nonWellFormedIterable] // TypeError: [] is not a function
     
    @@ -235,7 +235,7 @@ nonWellFormedIterable[Symbol.iterator] = () => 1

    简单迭代器

    -
    function makeIterator(array) {
    +
    function makeIterator(array) {
         let nextIndex = 0;
         return {
            next: function () {
    @@ -258,7 +258,7 @@ console.log(it.next().done);  // true
     
     

    无穷迭代器

    -
    function idMaker() {
    +
    function idMaker() {
         let index = 0;
         return {
            next: function() {
    @@ -280,7 +280,7 @@ console.log(it.next().value); // '2'
     
     

    使用生成器

    -
    function* makeSimpleGenerator(array) {
    +
    function* makeSimpleGenerator(array) {
         let nextIndex = 0;
     
         while(nextIndex < array.length) {
    @@ -313,7 +313,7 @@ console.log(gen.next().value); // '2'
     
     

    ES2015 类 class 中的迭代器

    -
    class SimpleClass {
    +
    class SimpleClass {
       constructor(data) {
         this.data = data
       }
    @@ -347,7 +347,7 @@ for (const val of simple) {
     
     

    {{jsxref("Generator", "生成器")}}对象既是迭代器,也是可迭代对象:

    -
    let aGeneratorObject = function* (){
    +
    let aGeneratorObject = function* (){
         yield 1;
         yield 2;
         yield 3;
    -- 
    cgit v1.2.3-54-g00ecf