Das Verständnis über ECMAScript Iterable und Iterator

1- Iteration

ECMAScript 6 bietet Sie einen neuen Weg um mit der Datensyntax zu interagieren. Das ist  Iteration (die Wiederholung). Jetzt werden wird es aufklären
Es gibt 2 Begriffen, die Sie unterscheiden brauchen
  • Iterator
  • Iterable
Die Begriffe  Iterator, Iterable werden für die Klasse  Array, Set, Map angewendet.

2- Der Begriff von Iterator

Iterator : Ein Objekt wird  Iterator genannt wenn es einen Zeiger (pointer) zum nächsten Element in  Iteration ​​​​​​​enthaltet.
In die technische Seite wird ein Objekt im  ECMAScript  Iterator genannt wenn es ein Method mit der Name von  next() hat, und das Method gibt ein Objekt in die Form von {value:SomeValue,done:booleanValue} zurück. done hat die Wert von  true wenn  Iteration fertig ist, und umgekehrt hat es die Wert von  false.
iterator-object-example.js
// An Iterator Object:
let myIterator = {

  someProp: "Some Prop",
  //
  next : function()  {
      return  {
         value: "Tom",
         done: false
      }
  }

}

// ----------- TEST -------------------

let entry = myIterator.next();

console.log(entry); // { value: 'Tom', done: false }

console.log(entry.value); // Tom
 

3- Der Begriff vom Iterable

Iterable  (wiederholbar) - In die Sprache Seite wird ein Objekt Iterable genannt wenn es eine Kollektion von Daten enthaltet und es bietet einen Weg um seine Daten zu veröffentlichen. Zum Beispiel ein Array kann  Iterable genannt werden denn es enthaltet eine Kollektion von Daten und Sie können auf seine Elementen zugreifen
In die technische Seite wird ein Objekt im  ECMAScript   Iterable (wiederholbar) genannt wenn es ein Method mit dem Schlüssel  Symbol.iterator, und das Method gibt ein Objekt  Iterator zurück.
Symbol.iterator ist eine Wert vom Datentyp Symbol, wie 100 ist eine Wert von Integer typ. Sie können in den folgenden Artikel  Symbol mehr lesen:
Unter ist es ein einfaches Beispiel. Ein Objekt mit properties:
  • myProp1
  • myProp2
  • 100
  • myProp3
  • Symbol.iterator
object-with-properties.js
// An Object:
let myObject = {

   // A property
   myProp1 : "Some Value 1",

    // A property
   'myProp2' : "Some Value 2",

   // A property
   100 : "One hundred",

   // A property (Method)
   myProp3 :  function()  {
       console.log("I'm a method");
   },

   // A property (Method)
   [Symbol.iterator] : function() {
      console.log("I'm a [Symbol.iterator] method");
   }

}


// ----------- TEST --------------

console.log( myObject["myProp1"] ); // Some Value 1

console.log( myObject["myProp2"] ); // Some Value 2

console.log( myObject[100] ); // One hundred

myObject["myProp3"](); // I'm a method

myObject[Symbol.iterator]();// I'm a [Symbol.iterator] method
 

Iterable?

Zusammenfassend kann also gesagt werden, dass ein Objekt Iterable genannt wird, wenn es ein Method mit dem Schlüssel Symbol.iterable hat, und das Method gibt ein Objekt Iterator zurück.
iterable-object-example.js
// An Iterator Object
let myIterator = {

   next : function()  {
      return  {value: Math.random(), done: false};
   }
}

// A Iterable object:
let myIterable = {
   myProp : "Some value",

   // A Method returns an Iterator object.
   [Symbol.iterator] :  function() {
       return myIterator;
   }

}

// ------ TEST -----------

// An iterator object.
let it = myIterable[Symbol.iterator]();

let entry = it.next();
console.log(entry);

entry = it.next();
console.log(entry);
 
Eine Klasse wird Iterable genannt wenn sie ein Method mit dem Name von [Symbol.iterator] hat. Die Objekte, die aus dieser Klasse erstellt werden, sind die Objekte  Iterable.
class-iterable-example.js
// An Iterable class.
class MyClass {

    constructor() {

    }

    someMethod() {
        console.log("Some method");
    }

    [Symbol.iterator]() {
        // An Iterator object.
        var myIterator = {
            next: function() {
                return {value: Math.random(),done: false};
            }
        };
        return myIterator;
    }

}

// ----------- TEST -----------------

let myObject = new MyClass();

myObject.someMethod();

// An Iterator Object.
let it = myObject[Symbol.iterator]();
let entry;
let i = 0;
while ( (entry = it.next()).done == false )  {
    console.log( entry);
    i++;
    if(i > 5)  {
      break;
    }
}
 
Achtung: Im  ECMAScript sind die  Array, Set, Map Klassen Iterable.