Web/JavaScript/Reference/Global objects/Symbol/iterator

From Get docs


The well-known Symbol.iterator symbol specifies the default iterator for an object. Used by for...of.


The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.

Description

Whenever an object needs to be iterated (such as at the beginning of a for..of loop), its @@iterator method is called with no arguments, and the returned iterator is used to obtain the values to be iterated.

Some built-in types have a default iteration behavior, while other types (such as Object) do not. The built-in types with a @@iterator method are:

See also Iteration protocols for more information.

Property attributes of Symbol.iterator
Writable no
Enumerable no
Configurable no

Examples

User-defined iterables

We can make our own iterables like this:

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

Or iterables can be defined directly inside a class or object using a computed property:

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' ]

Non-well-formed iterables

If an iterable's @@iterator method does not return an iterator object, then it is a non-well-formed iterable. Using it as such is likely to result in runtime exceptions or buggy behavior:

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

Specifications

Specification
ECMAScript (ECMA-262)The definition of 'Symbol.iterator' in that specification.

Browser compatibility

Update compatibility data on GitHub

Desktop Mobile Server
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet Node.js
iterator Chrome

Full support 43

Edge

Full support 12

Firefox

Full support 36

IE

No support No

Opera

Full support 30

Safari

Full support 10

WebView Android

Full support 43

Chrome Android

Full support 43

Firefox Android

Full support 36

Opera Android

Full support 30

Safari iOS

Full support 10

Samsung Internet Android

Full support 4.0

nodejs

Full support 0.12

Legend

Full support  
Full support
No support  
No support


See also