ECMAScript 5/6/7 compatibility tables
Switch branches/tags
Nothing to show
Clone or download
chicoxyzzy Merge pull request #1351 from chicoxyzzy/chrome_harmony_public_static…
…_class_fields

Public static class fields are available under flag in Chrome Canary 71
Latest commit 29eac28 Sep 21, 2018
Permalink
Failed to load latest commit information.
es2016plus Safari 12 release Sep 18, 2018
es5 Safari 12 release Sep 18, 2018
es6 Safari 12 release Sep 18, 2018
es7 update redirect from /esnext to /es2016plus for old (ES7) references Nov 12, 2016
esintl Safari 12 release Sep 18, 2018
esnext Public static class fields are available under flag in Chrome Canary 71 Sep 21, 2018
non-standard Safari 12 release Sep 18, 2018
strict-mode [ES5] Moved the strict subtests onto the main test page. May 17, 2016
.gitignore Only apps should have lockfiles Apr 27, 2018
.jshintignore [Tests] Actually lint all the files, and make them pass the linter (e… Jul 9, 2016
.jshintrc [Tests] Actually lint all the files, and make them pass the linter (e… Jul 9, 2016
.mailmap Add a Git .mailmap with my new name Oct 25, 2017
.npmrc Only apps should have lockfiles Apr 27, 2018
.travis.yml [Test] improve travis.yml Aug 30, 2016
LICENSE Add MIT license Feb 22, 2013
README.md Updated the README. Feb 2, 2016
build.js update TypeScript results with 'downlevelIteration' option Aug 8, 2018
data-common.json update TypeScript results with 'downlevelIteration' option Aug 8, 2018
data-es2016plus.js Edge 18 preview supports Promise.prototype.finally Aug 21, 2018
data-es5.js Udate Safari 12 results Jul 10, 2018
data-es6.js update TypeScript results with 'downlevelIteration' option Aug 8, 2018
data-esintl.js add initial results Jul 10, 2018
data-esnext.js Public static class fields are available under flag in Chrome Canary 71 Sep 21, 2018
data-non-standard.js Firefox 63 dropped SIMD support Jul 27, 2018
duktape.js Handle master snapshots better in duktape.js Oct 15, 2017
environments.json Safari 12 release Sep 18, 2018
favicon.ico Add site logo Sep 2, 2015
index.html index.html: avoid additional redirect from GitHub, update to ES6 Sep 3, 2015
jquery.floatThead.min.js Update jquery.floatThead.min.js Dec 15, 2016
logo.png Add site logo Sep 2, 2015
master.css remove all uses of document.write Jun 3, 2018
master.js Merge pull request #1306 from Perelandric/legacy_fixup Jun 4, 2018
mdn.png added MDN logo Apr 1, 2017
nashorn.js Added a test script for Oracle nashorn engine Feb 13, 2018
node.js [Tests] Actually lint all the files, and make them pass the linter (e… Jul 9, 2016
package.json add graalvm command Jul 10, 2018

README.md

ECMAScript compatibility tables

Gitter

Bitdeli Badge

Editing the tests

Edit the data-es5.js, data-es6.js, data-esnext.js, or data-non-standard.js files to adjust the tests and their recorded browser results. Run node build.js to build the HTML files from these JavaScript sources.

The ES6 tests themselves should be written in pure ES3, except for the sole ES6 feature being tested (as well as any ES5 features strictly required to use the ES6 feature). ES Next tests may use any ES5 features that they wish, and only the ES6 features strictly required to use the ES Next feature.

The test code is placed in multi-line comments (as in this hack), so that Node.js can parse the data scripts without throwing syntax errors when encountering features it does not support. The build.js script will wrap the code in an eval call inside a try, so the tests themselves do not need to catch errors that non-supporting platforms may throw.

Most tests have a significance rating, which affects how a platform's total support percentage is calculated. A test rated "large" (representing a landmark, transformative feature) is worth 1, one rated "medium" (representing a significant feature that's less universally useful, or is primarily connected to another feature) is worth 0.5, and one rated "small" (representing a useful but subtle improvement from the previous spec) is worth 0.25. "tiny" (0.125) should be reserved for very meager changes (such as changes to an existing function's parameters or side-effects) that nonetheless don't fall under the category of another feature.

In order to test compilers

Run npm install to install the compilers under test (and remember to npm update them frequently). Then run node build.js compilers to create compiler test pages under es6/compilers. Currently only the ES6 tests produce compiler test pages. Open the compilers' HTML files in a browser with close to zero native ES6 support, such as Internet Explorer 9 (although its lack of support for strict mode will cause some tests to fail), Opera 12, or Safari 5.1 (bearing in mind their native support for TypedArrays, __proto__ and such).

Note that some tests cannot be compiled correctly, as they rely on runtime eval() results to ensure that, for instance, certain syntactic constructs are syntax errors. These will fail on the compiler test pages. Support for those features should be divined manually.

In order to test Node.js

After installing dependencies using npm install, first compile a fresh ES6 HTML file using node build.js.

Then, run node ., where node is the executable you wish to test, along with any desired flags (such as --es-staging). The results should be printed in colour in stdout: green results indicate correct support, cyan results indicate support that incorrectly requires strict mode, and red indicates no support.

Note that this script is currently hard-coded to only display ES6 results.