Skip to content Skip to sidebar Skip to footer

ES 6: Difference Between Symbol.iterator And @@iterator

I was wondering if there was a specific difference in implementing an iterator using the @@iterator function versus the Symbol.iterator one: On MDN, there is a page on Array.protot

Solution 1:

The ECMAScript 2015 (ES6) specification uses @@iterator to reference Symbol.iterator. There is no @@iterator, and wherever you see it, read it as Symbol.iterator.

I think (someone more familiar with the ECMAScript spec might be able to back this up) the reason @@iterator is used is because you need to access Symbol properties on an object using square brackets ([]), but most parts of the ES2015 specification (and documentation) used the more familiar dot-notion (e.g. object.property versus object["property"]), and so@@somesymbol` is used to keep things consistent.

See page 38 (marked as page 18): http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf


Solution 2:

There is no @@iterator function. That token produces a syntax error - it is only used in specification to denote a specific symbol.

If you want to use that symbol in your code, e.g. to access iterators on arrays, you have to use Symbol.iterator. Which is a property of the Symbol class initialised to have the value @@iterator.


Post a Comment for "ES 6: Difference Between Symbol.iterator And @@iterator"