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 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@iterator
|
Chrome Full support 38 | Edge Full support 12 | Firefox Full support 36 | Internet Explorer No support Ні | 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 |