String.prototype[@@iterator]()

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

Спробуйте його в дії

Синтаксис

string[Symbol.iterator]()

Повернене значення

Новий ітерований об'єкт-ітератор, що видає кодові точки Unicode свого рядкового значення як окремі рядки.

Опис

Рядки ітеруються за кодовими точками Unicode. Це означає, що графемні кластери розбиваються, а сурогатні пари – зберігаються.

// "Зворот долоні показує направо: темний колір шкіри"
[..."👉🏿"]; // ['👉', '🏿']
// розбивається на базовий емодзі "Зворот долоні показує направо" та
// емодзі "Темний колір шкіри"

// "Родина: чоловік, хлопчик"
[..."👨‍👦"]; // [ '👨', '‍', '👦' ]
// розбивається на емодзі "Чоловік" і "Хлопчик", сполучені ZWJ

Приклади

Ітерування за допомогою циклу for...of

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

const str = "A\uD835\uDC68B\uD835\uDC69C\uD835\uDC6A";

for (const v of str) {
  console.log(v);
}
// "A"
// "\uD835\uDC68"
// "B"
// "\uD835\uDC69"
// "C"
// "\uD835\uDC6A"

Ручне скручування ітератора

Все ж, можна викликати метод next() поверненого об'єкта-ітератора вручну, щоб отримати максимальний контроль над процесом ітерування.

const str = "A\uD835\uDC68";

const strIter = str[Symbol.iterator]();

console.log(strIter.next().value); // "A"
console.log(strIter.next().value); // "\uD835\uDC68"

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

Сумісність із браузерами

desktop mobile server
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet Deno Node.js
@@iterator
Chrome Full support 38
Edge Full support 12
Firefox Full support 36
Internet Explorer No support No
Opera Full support 25
Safari Full support 9
WebView Android Full support 38
Chrome Android Full support 38
Firefox for Android Full support 36
Opera Android Full support 25
Safari on iOS Full support 9
Samsung Internet Full support 3.0
Deno Full support 1.0
Node.js Full support 0.12.0

Дивіться також