Table of contents
Please support this book: buy it (PDF, EPUB, MOBI) or donate
(Ad, please don’t block.)



1This is not completely true: there are a few minor breaking changes that don’t affect code on the web. These are detailed in section D.1 and section E.1 of the ES6 specification.

2Source: Tweet by Allen Wirfs-Brock.


1[Speaking JS] parseFloat() in (“Speaking JavaScript”).

2[Speaking JS] parseInt() in (“Speaking JavaScript”).

3[Speaking JS] The details of rounding errors are explained in “Speaking JavaScript”.

4Internally, JavaScript has two zeros. Math.sign(-0) produces the result -0 and Math.sign(+0) produces the result +0.

5Iterables are explained in another chapter.

6Explained in the chapter on Arrays.


1The exceptions are function expressions and object literals, which you have to put in parentheses, because they look like function declarations and code blocks.

2[Spec] Sect. “Imports” starts with grammar rules and continues with semantics.

3[Spec] The specification method GetExportedNames() collects the exports of a module. In step (7.d.i), a check prevents other modules’ default exports from being re-exported.

4[Spec] Sect. “Exports” starts with grammar rules and continues with semantics.


1[Speaking JS] “Pitfalls: Using an Object as a Map

2Based on “Closing iterators”, slides by David Herman.

3throw() is also an optional method, but is practically never used for iterators and therefore explained in the chapter on generators)

4Combinator” (in HaskellWiki) describes what combinators are.

5Or rather, the function counts up until the number start overflows and becomes Infinity, at which point it doesn’t change, anymore.