Symbol.iterator

Добревідомий символ Symbol.iterator визначає для об'єкта ітератор за замовчуванням. Використовується циклом for...of.

Опис

Коли виникає необхідність перебрати об'єкт (наприклад, на початку циклу for..of), його метод @@iterator викликається без аргументів, а ітератор, який він повертає, використовується для отримання значень, що перебираються.

Деякі вбудовані типи мають визначену за замовчуванням поведінку під час перебору, в той час, як інші типи (такі як Object) її не мають. Вбудовані типи, що мають метод @@iterator, наступні:

Дивіться більше інформації у статті Протоколи перебору.

Атрибути поля Symbol.iterator
Доступний для запису ні
Доступний для переліку ні
Доступний для налаштування ні

Приклади

Створені користувачем ітерабельні об'єкти

Ми можемо створювати власні ітерабельні об'єкти наступним чином:

var myIterable = {}
myIterable[Symbol.iterator] = function* () {
    yield 1;
    yield 2;
    yield 3;
};
[...myIterable] // [1, 2, 3]

Або ітерабельні об'єкти можна визначити безпосередньо всередині класу чи об'єкта, використовуючи обчислювані властивості:

class Foo {
  *[Symbol.iterator] () {
    yield 1;
    yield 2;
    yield 3;
  }
}

const someObj = {
  *[Symbol.iterator] () {
    yield 'а';
    yield 'б';
  }
}

[...new Foo] // [ 1, 2, 3 ]
[...someObj] // [ 'а', 'б' ]

Погано сформовані ітерабельні об'єкти

Якщо метод ітерабельного об'єкта @@iterator не повертає об'єкт ітератора, то це погано сформований ітерабельний об'єкт. Використання його в такому вигляді ймовірно призведе до викидання винятків під час виконання або помилкової поведінки:

var nonWellFormedIterable = {}
nonWellFormedIterable[Symbol.iterator] = () => 1
[...nonWellFormedIterable] // TypeError: [] is not a function

Специфікації

Специфікація
ECMAScript (ECMA-262)
The definition of 'Symbol.iterator' in that specification.

Сумісність з веб-переглядачами

BCD tables only load in the browser

Див. також