The truly experienced developers who used IE6/7/8 in the early days may remember late nights trying to fix compatibility issues between browsers. Let’s take a look at the engines behind the most popular browsers and how they’ve evolved.
- Internet Explorer – Chakra engines -> Edge – next version will be based on Chromium (a web browser – based on Blink Engine)
- Chrome – Original WebKit – then forked in ‘Blink Engine’
- Safari – Webkit – transformed into Nitro
- Opera – Presto Own Engine, then switched to Blink Rendering Engine (which contains V8 Engine)
There are several browsers, each one trying to implement the rules set by ECMAScript.
That’s cool, but who sets the rules in ECMAScript, and how are they selected?
There are five necessary steps to accelerate a feature from idea to implementation:
As with all projects, every feature developed along the way is included in a big, stable release. In the beginning, ECMA International didn’t release new features in a very organized way. But since 2015, the organization has provided regular, stable releases each year, often in June.
We’ve seen how the process works, now let’s take a look at which features ECMA International improved or added in each ECMAScript version:
#June 1997 – Initial ECMAScript Version
#June 1998 – aligned with ISO/IEC 16262 international standard
#December 1999 – regular expressions added; try-catch block; better string manipulation
ECMA International abandoned version 4 due to some complexities. New features that were added to this edition were either completely dropped or included in the sixth edition.
#December 2009 – The fifth edition came out after a 10-year break. “Strict Mode” was added, some features were removed, and access to the global object was cut. This version offered better support for JSON object (parse and stringify functions), new functions on arrays (map, filter, reduce, every, some, indexOf, lastIndexOf, forEach, and others), new functions for strings (trim, charAt), Object.defineProperty, getters and setters.
- Default parameters
- Rest/Spread Parameters (but only for arrays)
- Arrow functions (no more binding functions to context)
- Classes (Don’t worry, it’s only syntactic sugar)
- Iterators and Symbols (You should probably look into these – they’re very cool)
- Generators (If you’ve worked with React-Redux-Saga, in saga files they can be beneficial)
- String Literals
- Shorthand Properties
- Let and Const
- Binary and Octal and some other new methods and constants.
Starting from now on, all the releases will be made each year, so we will not have versions that contain as many features as the one from 2015.
#June 2016 – ES7 edition was launched with just two new additions: Array.prototype.includes() and Exponentiation operator **
#June 2017 – ES8 edition included Async/await (new way of writing asynchronous code, an alternative to Promises), New methods (Object.values(), Object.entries(), String.prototype.padEnd(), String.prototype.padStart(), Object.getOwnPropertyDescriptors()), Trailing commas.
#June 2018 – Also known as ECMAScript version 2018, this release offered new features: Rest operator (in object destructuring), Spread operator (in object literal), Asynchronous iteration, Promise.finally, Tagged string template, new regex functionality.
#June 2019 – ES10 version included New Methods (Array.flat, Array.flatMap, String.trimStart/trimEnd, Object.fromEntries), try…catch (e – OPTIONAL PARAM), .toString method revised, Symbol class update.
It’s interesting to see why each feature ended up as an ECMAScript standard. You can always take a look at the feature proposals and see intriguing features that were proposed but didn’t survive the T39 process.
I’m curious to know what kinds of features would be useful in the future. What do you think? Can you guess the features of the next release?
I’d be happy to know your thoughts on this topic, so post a comment.