Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
JavaScript の例外 "is not iterable" は、スプレッド構文で配列や関数呼び出しに展開される値、for...of の右辺として指定された値、Promise.all や Set() などの関数の引数として指定された値、あるいは配列の構造分解の右辺として指定された値が、反復可能オブジェクトでない場合に発生します。また、Array.fromAsync() や for await...of を、非同期ではない反復可能オブジェクトと共に使用した場合にも、このエラーが発生します。
配列または関数呼び出しへのスプレッド構文、for...of の右辺、 Promise.all や Set() などの引数、配列の構造分解パターンの元などとして指定された値が反復可能オブジェクトではありません。 反復可能なものは、Array、String、Map などのような組み込み反復可能型や、ジェネレーターの結果、反復可能プロトコルを実装しているオブジェクトが成ることができます。
反復可能ではないオブジェクトは、実行環境によっては undefined になることがあります。
JavaScript では、 Object は反復可能プロトコルを実装していない限り反復処理できません。したがって、オブジェクトのプロパティを反復処理するために for...of を使用することはできません。
代わりに、オブジェクトのプロパティを反復処理するためには Object.keys か Object.entries を使用してください。
この使用例のそのほかの選択肢として、Map を使用することもできます。
ジェネレーター関数は反復可能オブジェクトを生成するために呼び出す関数です。
ジェネレーターを呼び出していないとき、ジェネレーターに対応した Function オブジェクトは呼び出し可能ですが、反復処理はできません。ジェネレーターを呼び出すと、ジェネレーターの実行中に生成された値を反復処理する反復可能オブジェクトが生成されます。
独自の反復可能オブジェクトは、 Symbol.iterator メソッドを実装することで作成することができます。 iterator メソッドはイテレーターであるオブジェクト、すなわち next メソッドを返す必要があります。
こちらは正しい実装です。
This page was last modified on 2026年5月14日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.