String.prototype[Symbol.iterator]()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

[Symbol.iterator]()String 値のメソッドで、反復可能プロトコルを実装しており、スプレッド構文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"
}

構文

js
string[Symbol.iterator]()

引数

なし。

返値

新しい反復可能なイテレーターオブジェクトで、この文字列の各 Unicode コードポイントを、独立した文字列として生成します。

解説

文字列は Unicode コードポイントで反復処理されます。つまり、書記素クラスターは分割されますが、サロゲートペアは保持されます。

js
// "Backhand Index Pointing Right: Dark Skin Tone"
[..."👉🏿"]; // ['👉', '🏿']
// 基本的な "Backhand Index Pointing Right" の絵文字と
// "Dark skin tone" の絵文字に分割

// "Family: Man, Boy"
[..."👨‍👦"]; // [ '👨', '‍', '👦' ]
// "Man" と "Boy" の絵文字に分割され、 ZWJ で結合されます。

for...of ループを用いた反復処理

このメソッドを直接呼び出す必要はほとんどないことに注意してください。[Symbol.iterator]() メソッドが存在することで、文字列は反復可能になり、for...of ループのような反復処理構文は自動的にこのメソッドを呼び出して、ループするイテレーターを取得します。

js
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() メソッドを手動で呼び出すこともできます。

js
const str = "A\uD835\uDC68";

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

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

仕様書

Specification
ECMAScript® 2025 Language Specification
# sec-string.prototype-%symbol.iterator%

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
[Symbol.iterator]

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Uses a non-standard name.
Has more compatibility info.

関連情報