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

ブラウザー実装状況

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
Generator
next
return
throw

Legend

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

Full support
Full support

関連情報