JavaScript Symbol.iterator — зробити об'єкт перебірним


Symbol.iteratorсистемний символ, який робить об'єкт перебірним: у for...of, у спред-операторі, у деструктуризації.

автор: NagarD

Загальний опис

Це не хак, а офіційний протокол мови. Усе, що перебирається — масив, рядок, Map, Set, NodeList — має цей метод. Звичайний об'єкт не має, і саме тому for...of по ньому кидає помилку.

Додавши його своєму класу, ти вбудовуєш його в мову: [...myCollection], for (const x of myCollection), const [a, b] = myCollection — усе почне працювати саме.

Найпростіше реалізувати його генератором (*[Symbol.iterator]()): тоді не треба вручну писати next() і done.

автор: NagarD

Порада

Пишеш свою колекцію — додай *[Symbol.iterator](). Це п'ять рядків, які вмикають половину синтаксису мови.

автор: NagarD

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
iterator 38+ 36+ 9+ 25+ 12+ -
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
iterator 38+ yes yes 9+

Приклади

+ запропонувати свій приклад у пісочниці

Свій клас, що працює у for...of і спреді.

class Playlist {
    constructor() {
        this.tracks = ['Пісня 1', 'Пісня 2', 'Пісня 3'];
    }

    // генератором — найпростіше
    *[Symbol.iterator]() {
        yield* this.tracks;
    }
}

const playlist = new Playlist();

// тепер працює все одразу
for (const track of playlist) {
    console.log(track);
}

console.log([...playlist]);       // масив
const [first, second] = playlist; // деструктуризація
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід