Spec-Zone.ru › JavaScript

String.prototype[Symbol.iterator]()

Базовый уровень Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

Метод [Symbol.iterator]() значений String реализует протокол итерации и позволяет использовать строки в большинстве синтаксических конструкций, ожидающих итерируемые объекты, таких как оператор расширения (spread syntax) и циклы for...of. Он возвращает объект-итератор строки, который выдает кодовые точки Unicode строкового значения в виде отдельных строк.

Попробовать

const str = "The quick red fox jumped over the lazy dog's back.";

const iterator = str[Symbol.iterator]();
let theChar = iterator.next();

while (!theChar.done && theChar.value !== " ") {
  console.log(theChar.value);
  theChar = iterator.next();
  // Expected output: "T"
  //                  "h"
  //                  "e"
}

Синтаксис

string[Symbol.iterator]()

Параметры

Нет.

Возвращаемое значение

Новый итерируемый объект-итератор, который выдает кодовые точки Unicode строкового значения в виде отдельных строк.

Описание

Итерация строк происходит по кодовым точкам Unicode. Это означает, что кластеры графем будут разделены, но суррогатные пары будут сохранены.

// "Backhand Index Pointing Right: Dark Skin Tone"
[..."👉🏿"]; // ['👉', '🏿']
// splits into the basic "Backhand Index Pointing Right" emoji and
// the "Dark skin tone" emoji

// "Family: Man, Boy"
[..."👨‍👦"]; // [ '👨', '‍', '👦' ]
// splits into the "Man" and "Boy" emoji, joined by a ZWJ

Примеры

Итерация с использованием цикла for...of

Обратите внимание, что редко требуется вызывать этот метод напрямую. Существование метода [Symbol.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"

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

Спецификация
Спецификация языка ECMAScript® 2027
# sec-string.prototype-%symbol.iterator%

Совместимость с браузерами

Десктоп Мобильные Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
@@iterator
38
12
36
27–36Используется свойство-заполнитель с именем @@iterator.
17–27Используется свойство-заполнитель с именем iterator.
25
9
38
36
27–36Используется свойство-заполнитель с именем @@iterator.
17–27Используется свойство-заполнитель с именем iterator.
25
9
3.0
38
9
1.0.0
1.0
0.12.0

Смотрите также

  • Полифил String.prototype[Symbol.iterator] в core-js
  • Руководство Числа и строки
  • Symbol.iterator
  • Протоколы итерации

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Symbol.iterator

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API