--- title: Symbol.iterator slug: Web/JavaScript/Reference/Global_Objects/Symbol/iterator tags: - ECMAScript 2015 - JavaScript - Property - Symbol translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/iterator ---
{{JSRef}}

Symbol.iterator は、オブジェクトのデフォルトのイテレーターを指定します。for...of によって使用されます。

{{EmbedInteractiveExample("pages/js/symbol-iterator.html")}}

説明

オブジェクトを反復する必要がある場合(for..of ループの開始時など)は常に、その @@iterator メソッドが引数なしで呼び出され、返されたイテレーターを使用して反復される値が取得されます。

一部の組み込み型にはデフォルトの反復動作がありますが、他の型( {{jsxref("Object")}} など)にはありません。@@iterator メソッドの組み込み型は次のとおりです。

詳細については、反復処理プロトコルも参照してください。

{{js_property_attributes(0,0,0)}}

ユーザー定義の反復可能項目

次のように独自の反復可能オブジェクトを作成できます。

var myIterable = {}
myIterable[Symbol.iterator] = function* () {
    yield 1;
    yield 2;
    yield 3;
};
[...myIterable] // [1, 2, 3]

または、計算されたプロパティを使用して、クラスやオブジェクト内で反復可能オブジェクトを直接定義できます。

class Foo {
  *[Symbol.iterator] () {
    yield 1;
    yield 2;
    yield 3;
  }
}

const someObj = {
  *[Symbol.iterator] () {
    yield 'a';
    yield 'b';
  }
}

[...new Foo] // [ 1, 2, 3 ]
[...someObj] // [ 'a', 'b' ]

非整形反復処理

もし反復可能項目の @@iterator メソッドがイテレーターオブジェクトを返さない場合、それは非整形反復可能項目です。それを使用すると、実行時に例外が発生したり、バグが発生したりする可能性があります。

var nonWellFormedIterable = {}
nonWellFormedIterable[Symbol.iterator] = () => 1
[...nonWellFormedIterable] // TypeError: [] is not a function

仕様

仕様書
{{SpecName('ESDraft', '#sec-symbol.iterator', 'Symbol.iterator')}}

ブラウザー実装状況

{{Compat("javascript.builtins.Symbol.iterator")}}

関連情報