Javascript in 2017
The JS environment is, as we know, “complicated”.
Every browser uses a different JavaScript engine: Chrome runs V8, Firefox runs SpiderMonkey, and Internet Explorer uses Chakra. Each implements a different subset of ES2015 features.
There are also multiple Javascript versions (or rather ECMAScript specifications)
This table outlines the major differences
Edition | Date published | Major changes |
1 | 1997 | First edition |
2 | 1998 | |
3 | 1999 | Added regular expressions, better string handling, new control statements, try/catch exception handling, tighter definition of errors, formatting for numeric output and other enhancements |
4 | Abandoned | ABANDONED!! |
5 | 2009 | Adds “strict mode,getters and setters, JSON, and more complete reflection on object properties |
6 | 2015 | ECMAScript 6 (ES6) –> ECMAScript 2015 (ES2015) Classes and modules, for/of loops, arrow functions, binary data, typed arrays, collections (maps, sets and weak maps), promises, number and math enhancements, reflection, and proxies (metaprogramming for virtual objects and wrappers). Also known as “ES6 Harmony.” |
7 | 2016 | ECMAScript 2016 Language reform, code isolation, control of effects and library/tool enabling from ES2015, includes two new features: the exponentiation operator (**) and Array.prototype.includes. |
8 | 2017 | Concurrency and atomics, zero-copy binary data transfer, more number and math enhancements, syntactic integration with promises (await/async), observable streams, SIMD types, better metaprogramming with classes, class and instance properties, operator overloading, value types (first-class primitive-like objects), records and tuples, and traits. |
For compatibility between browsers, see these tables: http://caniuse.com/ and http://kangax.github.io/compat-table/es6/ (multiple tables)