However, when the committee got together they were divided into 2 separate camps. In one corner was the “ECMAScript 4 Camp,” composed of Adobe, Mozilla, Opera & Google, who still wanted to work towards the massive upgrade. In the other corner was Microsoft & Yahoo, the “ECMAScript 3.1 Camp”, seeking a small subset of ES4, which would be more of an incremental upgrade of ES3 containing some minor features and bug fixes.
The rift ran pretty deep, but thankfully in July 2008 at a meeting in Oslo, Norway, a compromise was hashed out:
- Essentially what was ECMAScript 3.1 would become ECMAScript 5 — an incremental upgrade of ES3.
- TC39 would then develop a new major release that would be a scaled back version of the ambitious ES4, but bigger in scope than the incremental ES5. This major release was codenamed Harmony (due to the circumstances in which it was created) and would be for the most part what we now know as ECMAScript 6.
- Some other features of the original ES4 plan would be dropped to be picked up in subsequent versions.
The compromise did result in ECMAScript 4 being officially abandoned, but a renewed resolve was formed that any new ideas would be developed with the consensus of the entire TC39 in order to prevent the potential for future schisms.
It added several enhancements to the standard library such as:
- JSON parsing/serialization support
- Array prototype methods (like
- Methods for listing properties (like
There were also syntactic updates like:
- Allowances for dangling commas at the end of lists or object definitions
- Allowances for reserved words (like
for) as object properties
ECMAScript 6, which we will be learning about in great detail over a series of blog posts, was originally planned to be released in 2013, but wasn’t officially released until in June 2015. ECMAScript Harmony was the codename for the group of features following ES5, but it became clear that its goals were still too ambitious, so TC39 decided to break it up into two phases:
- The highest priority features would be in the next release of ECMAScript. It was codenamed ECMAScript.next in order to try to avoid the whole numbering fiasco with the lost ECMAScript 4.
- The remaining features would find their way into the following version.
As ECMAScript.next matured, the code name was dropped and it began going by ECMAScript 6, or simply, ES6. However, in late 2014, TC39 decided to rename ECMAScript 6 to ECMAScript 2015 in light of the new plan to release ECMAScript on a yearly cadence. By this time the standard was already well-established as ECMAScript 6, so most people still know it as ES6 and refer to it as such.
ES6 features are slowly rolling into the interpreters of our modern browsers and servers. The ES6 compatibility table tracks just how much of the standard each engine supports. As of writing, Microsoft’s new Edge browser is actually leading the pack with 67% of ES6 features supported. Firefox 11 (released in March 2012) was the first browser with “significant” support (more than 10%). Transpilers like Babel and Tracer let you compile a lot of ES6 down to valid ES5 for cross-browser compatibility. More on this in a future blog post.
Work on ECMAScript 7 has already begun and the current proposals are on GitHub. As mentioned earlier, TC39 is transitioning to a yearly release cadence, so the releases will now be more incremental. And since ECMAScript 7 officially kicks off the yearly release cycle it has also been renamed to ECMAScript 2016. I may preview some of its proposed features at the end of this series.