Generator

Baseline Widely available

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

Generator オブジェクトはジェネレーター関数によって返され、反復可能プロトコルイテレータープロトコルの両方に準拠しています。

試してみましょう

const foo = function* () {
  yield "a";
  yield "b";
  yield "c";
};

let str = "";
for (const val of foo()) {
  str = str + val;
}

console.log(str);
// Expected output: "abc"

コンストラクター

このオブジェクトを直接インスタンス化することはできません。代わりに、ジェネレーター関数から Generator のインスタンスを返すことができます。

function* generator() {
  yield 1;
  yield 2;
  yield 3;
}

const gen = generator(); // "Generator { }"

インスタンスメソッド

Generator.prototype.next()

yield 式で得られた値を返します。

Generator.prototype.return()

与えられた値を返し、ジェネレーターを終了します。

Generator.prototype.throw()

ジェネレーターにエラーを投げます。(そのジェネレーターの中からキャッチされない限り、ジェネレーターも終了します)

無限イテレーター

js
function* infinite() {
  let index = 0;

  while (true) {
    yield index++;
  }
}

const generator = infinite(); // "Generator { }"

console.log(generator.next().value); // 0
console.log(generator.next().value); // 1
console.log(generator.next().value); // 2
// ...

仕様書

Specification
ECMAScript® 2025 Language Specification
# sec-generator-objects

ブラウザー実装状況

BCD tables only load in the browser

関連情報