Compilers/polyfills | Desktop browsers | Servers/runtimes | Mobile | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Feature name | Current browser | Traceur | Babel + |
Closure | Type- Script + |
Type- Script + |
Type- Script + |
Type- Script + |
Type- Script + |
Type- Script + |
es7-shim | IE 10 | IE 11 | Edge 12 | Edge 13 | Edge 14 | Edge 15 | Edge 16 | Edge 17 Preview | FF 45 ESR | FF 51 | FF 52 ESR | FF 53 | FF 54 | FF 55 | FF 56 | FF 57 | FF 58 | FF 59 Beta | FF 60 Nightly | OP 12.10 | CH 56, OP 43[1] |
CH 57, OP 44[1] |
CH 58, OP 45[1] |
CH 59, OP 46[1] |
CH 60, OP 47[1] |
CH 61, OP 48[1] |
CH 62, OP 49[1] |
CH 63, OP 50[1] |
CH 64, OP 51[1] |
CH 65, OP 52[1] |
CH 66, OP 53[1] |
SF 8 | SF 9 | SF 10 | SF 10.1 | SF 11 | SF 11.1 | SF TP | WK | PJS | Node 0.10[3] | Node 0.12[4] | Node 4[4] | Node >=6.5 <7[4] | Node 7.0-7.5[4] | Node >=7.6 <8[4] | Node 8.0-8.2[4] | Node >=8.3 <8.7[4] | Node >=8.7 <9[4] | DUK 2.0 | DUK 2.1 | DUK 2.2 | AN 4.4 | AN 4.4.3 | iOS 8 | iOS 9 | iOS 10.0-10.2 | iOS >=10.3 <11 | iOS 11 | |
2016 features | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
§exponentiation (**) operator | 2/3 | 3/3 | 3/3 | 2/3 | 2/3 | 2/3 | 2/3 | 2/3 | 2/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 3/3 | 3/3 | 3/3 | 3/3 | 0/3 | 0/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 0/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 0/3 | 0/3 | 0/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 2/3 | 2/3 | 2/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 3/3 | 3/3 | ||
§basic support | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Flag[5] | Yes | Yes | Yes | Yes | No[6] | No[6] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Flag | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes | Yes | ||
§assignment | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Flag[5] | Yes | Yes | Yes | Yes | No | No[6] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Flag | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes | Yes | ||
§early syntax error for unary negation without parens | No | Yes | Yes | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Flag | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§Array.prototype.includes | 0/3 | 3/3 | 1/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 2/3 | 0/3 | 0/3 | 0/3 | 0/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 0/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 0/3 | 2/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 0/3 | 0/3 | 0/3 | 0/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 2/3 | 3/3 | 3/3 | 3/3 | ||
§Array.prototype.includes | No | Yes[7] | Yes | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | Yes | Yes | Yes | Yes | ||
§Array.prototype.includes is generic | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.includes | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | ||
2016 misc | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
§generator functions can't be used with "new" [9] | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | ||
§generator throw() caught by inner generator [10] | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Flag | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | ||
§strict fn w/ non-strict non-simple params is error[11] | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | ||
§nested rest destructuring, declarations [12] | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Flag[5] | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§nested rest destructuring, parameters[13] | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Flag[5] | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§Proxy, "enumerate" handler removed [14] | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | ||
§Proxy internal calls, Array.prototype.includes | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | ||
2017 features | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
§Object static methods | 0/4 | 4/4 | 3/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 3/4 | 0/4 | 0/4 | 0/4 | 0/4 | 2/4 | 4/4 | 4/4 | 4/4 | 0/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 0/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 0/4 | 0/4 | 1/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 0/4 | 0/4 | 0/4 | 0/4 | 0/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 0/4 | 0/4 | 0/4 | 0/4 | 0/4 | 0/4 | 0/4 | 1/4 | 4/4 | 4/4 | ||
§Object.values | No | Yes[7] | Yes | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes | No | No | No | No | Yes | Yes | Yes | Yes | No[6] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Flag | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§Object.entries | No | Yes[7] | Yes | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes | No | No | No | No | Yes | Yes | Yes | Yes | No[6] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Flag | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§Object.getOwnPropertyDescriptors | No | Yes[7] | Yes | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes | No | No | No | No | No | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Flag | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | ||
§Object.getOwnPropertyDescriptors doesn't provide undefined descriptors | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | No | No | No | No | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§String padding | 0/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 2/2 | 2/2 | 2/2 | 0/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 0/2 | 0/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 0/2 | 0/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 2/2 | 2/2 | 2/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 2/2 | 2/2 | 2/2 | ||
§String.prototype.padStart | No | Yes[7] | Yes | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes | No | No | No | No | Flag[5] | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Flag | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Flag | Flag | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | ||
§String.prototype.padEnd | No | Yes[7] | Yes | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes | No | No | No | No | Flag[5] | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Flag | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Flag | Flag | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | ||
§trailing commas in function syntax | 0/2 | 2/2 | 2/2 | 0/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 2/2 | 2/2 | 2/2 | 2/2 | 0/2 | 0/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 0/2 | 0/2 | 0/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 0/2 | 0/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 2/2 | 2/2 | 2/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 2/2 | 2/2 | 2/2 | ||
§in parameter lists | No | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Flag | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | ||
§in argument lists | No | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Flag | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | ||
§async functions | 3/15 | 3/15 | 9/15 | 2/15 | 2/15 | 2/15 | 2/15 | 2/15 | 2/15 | 0/15 | 0/15 | 0/15 | 0/15 | 0/15 | 0/15 | 15/15 | 15/15 | 15/15 | 0/15 | 0/15 | 15/15 | 15/15 | 15/15 | 15/15 | 15/15 | 15/15 | 15/15 | 15/15 | 15/15 | 0/15 | 15/15 | 15/15 | 15/15 | 15/15 | 15/15 | 15/15 | 15/15 | 15/15 | 15/15 | 15/15 | 15/15 | 0/15 | 0/15 | 0/15 | 15/15 | 15/15 | 15/15 | 15/15 | 15/15 | 0/15 | 0/15 | 0/15 | 0/15 | 0/15 | 0/15 | 15/15 | 15/15 | 15/15 | 15/15 | 0/15 | 0/15 | 0/15 | 0/15 | 0/15 | 0/15 | 0/15 | 0/15 | 15/15 | 15/15 | ||
§return | Yes | Yes[15] | Yes | Yes[16] | Yes[16] | Yes[16] | Yes[16] | Yes[16] | Yes[16] | No | No | No | No | Flag[5] | Flag[5] | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Flag | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§throw | ? | ? | Yes | ? | ? | ? | ? | ? | ? | No | No | No | No | Flag[5] | Flag[5] | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | ? | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§no line break between async and function | ? | ? | No | ? | ? | ? | ? | ? | ? | No | No | No | No | No | Flag[5] | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | ? | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§no "prototype" property | ? | ? | No | ? | ? | ? | ? | ? | ? | No | No | No | No | Flag[5] | Flag[5] | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | ? | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§await | Yes | Yes[15] | Yes | Yes[16] | Yes[16] | Yes[16] | Yes[16] | Yes[16] | Yes[16] | No | No | No | No | Flag[5] | Flag[5] | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Flag | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§await, rejection | ? | ? | Yes | ? | ? | ? | ? | ? | ? | No | No | No | No | Flag[5] | Flag[5] | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | ? | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§must await a value | ? | ? | Yes | ? | ? | ? | ? | ? | ? | No | No | No | No | Flag[5] | Flag[5] | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | ? | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§can await non-Promise values | ? | ? | Yes | ? | ? | ? | ? | ? | ? | No | No | No | No | Flag[5] | Flag[5] | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | ? | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§cannot await in parameters | ? | ? | No | ? | ? | ? | ? | ? | ? | No | No | No | No | Flag[5] | Flag[5] | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | ? | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§async methods, object literals | ? | ? | Yes | ? | ? | ? | ? | ? | ? | No | No | No | No | Flag[5] | Flag[5] | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | ? | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§async methods, classes | ? | ? | Yes | ? | ? | ? | ? | ? | ? | No | No | No | No | Flag[5] | Flag[5] | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | ? | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§async arrow functions | Yes | Yes[15] | Yes | No | No | No | No | No | No | No | No | No | No | Flag[5] | Flag[5] | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Flag | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§correct prototype chain | ? | ? | No | ? | ? | ? | ? | ? | ? | No | No | No | No | No | Flag[5] | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | ? | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§async function prototype, Symbol.toStringTag | ? | ? | No | ? | ? | ? | ? | ? | ? | No | No | No | No | No | No | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | ? | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§async function constructor | ? | ? | No | ? | ? | ? | ? | ? | ? | No | No | No | No | No | Flag[5] | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | ? | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§shared memory and atomics | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 17/17 | 17/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 17/17 | 17/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 17/17 | 17/17 | 17/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 16/17 | 12/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 17/17 | 17/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 0/17 | 16/17 | 12/17 | ||
§SharedArrayBuffer | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[5] | Yes | Yes | No | No[17] | No[17] | Flag[18] | Flag[18] | Yes | Yes | No[19] | No[19] | No[19] | No[19] | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | Yes | No[21] | No[21] | No[21] | No[21] | No | No | No | Yes | No[22] | No[22] | No[22] | No[22] | No | No | No | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | No | No | No | No | No | No | No | No | Yes | No[22] | ||
§SharedArrayBuffer[Symbol.species] | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[5] | Yes | Yes | No | No | No[17] | Flag[18] | Flag[18] | Yes | Yes | No[19] | No[19] | No[19] | No[19] | No | No | No | No | No | Yes | Yes | Yes | No[21] | No[21] | No[21] | No[21] | No | No | No | Yes | No[22] | No[22] | No[22] | No[22] | No | No | No | No | No | No | No | No | Yes | Yes | No | No | No | No | No | No | No | No | Yes | No[22] | ||
§SharedArrayBuffer.prototype.byteLength | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[5] | Yes | Yes | No | No[17] | No[17] | Flag[18] | Flag[18] | Yes | Yes | No[19] | No[19] | No[19] | No[19] | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | Yes | No[21] | No[21] | No[21] | No[21] | No | No | No | No | No[22] | No[22] | No[22] | No[22] | No | No | No | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | No | No | No | No | No | No | No | No | No | No[22] | ||
§SharedArrayBuffer.prototype.slice | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[5] | Yes | Yes | No | No | No[17] | Flag[18] | Flag[18] | Yes | Yes | No[19] | No[19] | No[19] | No[19] | No | No | No | No | No | Yes | Yes | Yes | No[21] | No[21] | No[21] | No[21] | No | No | No | Yes | No[22] | No[22] | No[22] | No[22] | No | No | No | No | No | No | No | No | Yes | Yes | No | No | No | No | No | No | No | No | Yes | No[22] | ||
§SharedArrayBuffer.prototype[Symbol.toStringTag] | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[5] | Yes | Yes | No | No | No[17] | Flag[18] | Flag[18] | Yes | Yes | No[19] | No[19] | No[19] | No[19] | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | Yes | No[21] | No[21] | No[21] | No[21] | No | No | No | Yes | No[22] | No[22] | No[22] | No[22] | No | No | No | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | No | No | No | No | No | No | No | No | Yes | No[22] | ||
§Atomics.add | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[5] | Yes | Yes | No | No[17] | No[17] | Flag[18] | Flag[18] | Yes | Yes | No[19] | No[19] | No[19] | No[19] | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | Yes | No[21] | No[21] | No[21] | No[21] | No | No | No | Yes | Yes | No[22] | No[22] | No[22] | No | No | No | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§Atomics.and | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[5] | Yes | Yes | No | No[17] | No[17] | Flag[18] | Flag[18] | Yes | Yes | No[19] | No[19] | No[19] | No[19] | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | Yes | No[21] | No[21] | No[21] | No[21] | No | No | No | Yes | Yes | No[22] | No[22] | No[22] | No | No | No | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§Atomics.compareExchange | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[5] | Yes | Yes | No | No[17] | No[17] | Flag[18] | Flag[18] | Yes | Yes | No[19] | No[19] | No[19] | No[19] | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | Yes | No[21] | No[21] | No[21] | No[21] | No | No | No | Yes | Yes | No[22] | No[22] | No[22] | No | No | No | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§Atomics.exchange | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[5] | Yes | Yes | No | No[17] | No[17] | Flag[18] | Flag[18] | Yes | Yes | No[19] | No[19] | No[19] | No[19] | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | Yes | No[21] | No[21] | No[21] | No[21] | No | No | No | Yes | Yes | No[22] | No[22] | No[22] | No | No | No | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§Atomics.wait | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[5] | Yes | Yes | No | No[17] | No[17] | Flag[18] | Flag[18] | Yes | Yes | No[19] | No[19] | No[19] | No[19] | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | Yes | No[21] | No[21] | No[21] | No[21] | No | No | No | Yes | Yes | No[22] | No[22] | No[22] | No | No | No | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§Atomics.wake | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[5] | Yes | Yes | No | No[17] | No[17] | Flag[18] | Flag[18] | Yes | Yes | No[19] | No[19] | No[19] | No[19] | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | Yes | No[21] | No[21] | No[21] | No[21] | No | No | No | Yes | Yes | No[22] | No[22] | No[22] | No | No | No | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§Atomics.isLockFree | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[5] | Yes | Yes | No | No[17] | No[17] | Flag[18] | Flag[18] | Yes | Yes | No[19] | No[19] | No[19] | No[19] | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | Yes | No[21] | No[21] | No[21] | No[21] | No | No | No | Yes | Yes | No[22] | No[22] | No[22] | No | No | No | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§Atomics.load | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[5] | Yes | Yes | No | No[17] | No[17] | Flag[18] | Flag[18] | Yes | Yes | No[19] | No[19] | No[19] | No[19] | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | Yes | No[21] | No[21] | No[21] | No[21] | No | No | No | Yes | Yes | No[22] | No[22] | No[22] | No | No | No | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§Atomics.or | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[5] | Yes | Yes | No | No[17] | No[17] | Flag[18] | Flag[18] | Yes | Yes | No[19] | No[19] | No[19] | No[19] | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | Yes | No[21] | No[21] | No[21] | No[21] | No | No | No | Yes | Yes | No[22] | No[22] | No[22] | No | No | No | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§Atomics.store | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[5] | Yes | Yes | No | No[17] | No[17] | Flag[18] | Flag[18] | Yes | Yes | No[19] | No[19] | No[19] | No[19] | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | Yes | No[21] | No[21] | No[21] | No[21] | No | No | No | Yes | Yes | No[22] | No[22] | No[22] | No | No | No | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§Atomics.sub | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[5] | Yes | Yes | No | No[17] | No[17] | Flag[18] | Flag[18] | Yes | Yes | No[19] | No[19] | No[19] | No[19] | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | Yes | No[21] | No[21] | No[21] | No[21] | No | No | No | Yes | Yes | No[22] | No[22] | No[22] | No | No | No | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
§Atomics.xor | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[5] | Yes | Yes | No | No[17] | No[17] | Flag[18] | Flag[18] | Yes | Yes | No[19] | No[19] | No[19] | No[19] | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | Yes | No[21] | No[21] | No[21] | No[21] | No | No | No | Yes | Yes | No[22] | No[22] | No[22] | No | No | No | No | Flag[20] | Flag[20] | Flag[20] | Flag[20] | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
2017 misc | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
§Proxy "ownKeys" handler, duplicate keys for non-extensible targets (ES 2017 semantics) [23] | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | ||
§RegExp "u" flag, case folding | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | ||
§arguments.caller removed | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Yes | Yes | ||
2017 annex b | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
§Object.prototype getter/setter methods | 0/16 | 16/16 | 0/16 | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 | 0/16 | 0/16 | 8/16 | 12/16 | 12/16 | 12/16 | 12/16 | 14/16 | 14/16 | 14/16 | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 | 12/16 | 10/16 | 12/16 | 12/16 | 12/16 | 12/16 | 12/16 | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 | 12/16 | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 | 12/16 | 0/16 | 10/16 | 10/16 | 10/16 | 10/16 | 10/16 | 12/16 | 12/16 | 12/16 | 0/16 | 0/16 | 16/16 | 6/16 | 6/16 | 12/16 | 16/16 | 16/16 | 16/16 | 16/16 | ||
§__defineGetter__ | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§__defineGetter__, symbols | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Flag | Flag | No | Yes | Yes | Yes | Yes | ||
§__defineGetter__, ToObject(this) | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | No | No | No | No | No | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Flag[24] | Flag[24] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | Flag[24] | Flag[24] | No | No | Yes | No | No | Yes | Yes | Yes | Yes | Yes | ||
§__defineSetter__ | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§__defineSetter__, symbols | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Flag | Flag | No | Yes | Yes | Yes | Yes | ||
§__defineSetter__, ToObject(this) | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | No | No | No | No | No | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Flag[24] | Flag[24] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | Flag[24] | Flag[24] | No | No | Yes | No | No | Yes | Yes | Yes | Yes | Yes | ||
§__lookupGetter__ | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§__lookupGetter__, prototype chain | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§__lookupGetter__, symbols | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Flag | Flag | No | Yes | Yes | Yes | Yes | ||
§__lookupGetter__, ToObject(this) | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Flag[24] | Flag[24] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | Flag[24] | Flag[24] | No | No | Yes | No | No | Yes | Yes | Yes | Yes | Yes | ||
§__lookupGetter__, data properties can shadow accessors | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | Yes | Yes | Yes | No | No | Yes | No | No | Yes | Yes | Yes | Yes | Yes | ||
§__lookupSetter__ | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§__lookupSetter__, prototype chain | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§__lookupSetter__, symbols | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Flag | Flag | No | Yes | Yes | Yes | Yes | ||
§__lookupSetter__, ToObject(this) | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Flag[24] | Flag[24] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | Flag[24] | Flag[24] | No | No | Yes | No | No | Yes | Yes | Yes | Yes | Yes | ||
§__lookupSetter__, data properties can shadow accessors | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | Yes | Yes | Yes | No | No | Yes | No | No | Yes | Yes | Yes | Yes | Yes | ||
§Proxy internal calls, getter/setter methods | 0/4 | 0/4 | 0/4 | 0/4 | 0/4 | 0/4 | 0/4 | 0/4 | 0/4 | 0/4 | 0/4 | 0/4 | 0/4 | 2/4 | 4/4 | 4/4 | 4/4 | 4/4 | 2/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 0/4 | 2/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 0/4 | 0/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 0/4 | 0/4 | 0/4 | 0/4 | 0/4 | 2/4 | 2/4 | 4/4 | 4/4 | 4/4 | 0/4 | 0/4 | 0/4 | 0/4 | 0/4 | 0/4 | 0/4 | 4/4 | 4/4 | 4/4 | ||
§__defineGetter__ | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | ||
§__defineSetter__ | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | ||
§__lookupGetter__ | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | ||
§__lookupSetter__ | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | Yes | ||
§assignments allowed in for-in head in non-strict mode | Yes | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | ||
2018 features | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
§object rest/spread properties | 0/2 | 2/2 | 0/2 | 0/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 2/2 | 2/2 | 2/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 2/2 | 2/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | ||
§object rest properties | No | Yes | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Flag | Flag | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes | Yes | Yes | No | No | No | No | No | No | No | Flag | Yes | Yes | No | No | No | No | No | No | No | No | No | No | ||
§object spread properties | No | Yes | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Flag | Flag | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes | Yes | Yes | No | No | No | No | No | No | No | Flag | Yes | Yes | No | No | No | No | No | No | No | No | No | No | ||
§Promise.prototype.finally | 0/3 | 3/3 | 0/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 3/3 | 3/3 | 3/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 3/3 | 3/3 | 3/3 | 3/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 3/3 | 3/3 | 3/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | 0/3 | ||
§basic support | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | No | No | No | No | No | No | No[25] | No[25] | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No | No[25] | No | No | No | No | No | No | No | No | No | No | ||
§don't change resolution value | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | No | No | No | No | No | No | No[25] | No[25] | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No | No[25] | No | No | No | No | No | No | No | No | No | No | ||
§change rejection value | No | Yes[7] | No | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | Yes[8] | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | No | No | No | No | No | No | No[25] | No[25] | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No | No[25] | No | No | No | No | No | No | No | No | No | No | ||
§template literal revision | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Flag[24] | Flag[24] | Flag[24] | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Flag[24] | Flag[24] | No | No | No | No | No | No | No | No | No | Yes | ||
§s (dotAll) flag for regular expressions | ? | Yes | No | ? | ? | ? | ? | ? | ? | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | ? | ? | ? | ? | Flag[24] | Flag[24] | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes | Yes | Yes | No | ? | ? | ? | ? | ? | ? | ? | Flag[24] | Flag[24] | ? | ? | No | ? | ? | No | No | No | No | No | ||
§RegExp named capture groups | No | Yes | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[24] | Flag[24] | Flag[24] | Flag[24] | Yes | Yes | Yes | No | No | No | No | No | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Flag[24] | Flag[24] | No | No | No | No | No | No | No | No | No | No | ||
§RegExp Lookbehind Assertions | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[24] | Flag[24] | Flag[24] | Flag[24] | Flag[24] | Flag[24] | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No | No | No | No | Flag[24] | Flag[24] | Flag[24] | Flag[24] | Flag[24] | Flag[24] | No | No | No | No | No | No | No | No | No | No | ||
§RegExp Unicode Property Escapes | No | Yes | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Flag[24] | Flag[24] | Flag[24] | Flag[24] | Flag[24] | Yes | Yes | Yes | No | No | No | No | No | Yes | Yes | Yes | No | No | No | No | No | No | No | No | Flag[24] | Flag[24] | No | No | No | No | No | No | No | No | No | No | ||
§Asynchronous Iterators | 0/2 | 2/2 | 0/2 | 0/2 | 0/2 | 2/2 | 2/2 | 2/2 | 2/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 2/2 | 2/2 | 2/2 | 2/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 2/2 | 2/2 | 2/2 | 2/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 2/2 | 2/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | 0/2 | ||
§async generators | No | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No[6] | No[6] | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | Flag[24] | Yes | Yes | Yes | Yes | No | No | No | No | No | No | Yes | Yes | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | ||
§for-await-of loops | No | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No[6] | No[6] | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | Flag[24] | Yes | Yes | Yes | Yes | No | No | No | No | No | No | Yes | Yes | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No |
[1] Flagged features have to be enabled via "Experimental Javascript features" flag unless otherwise stated
[2] Flagged features require an optional transformer setting.
[3] Flagged features have to be enabled via --harmony
flag
[4] Flagged features have to be enabled via --harmony
or --es_staging
flag
[5] Flagged features have to be enabled via "Enable experimental Javascript features" setting under about:flags
[6] The feature is enabled by default only in Firefox Nightly.
[7] This feature is supported when using Babel with core-js.
[8] This feature is supported when using TypeScript with core-js.
[9] TC39 meeting notes from July 28, 2015.
[10] 'Semantics of yield* in throw case' GitHub issue in ECMA-262 repo.
[11] TC39 meeting notes from July 29, 2015.
[12] TC39 meeting notes from July 28, 2015.
[13] TC39 meeting notes from July 28, 2015.
[15] This feature requires native generators or regenerator-runtime
, it's a part of babel-polyfill
or babel-runtime
.
[16] TypeScript async
/ await
requires native generators support.
[17] The feature is enabled by default only in Firefox Developer and Firefox Nightly.
[23] The behaviour of the Proxy “ownKeys” handler in presence of duplicate keys has been modified later.
[24] The feature have to be enabled via --js-flags="--harmony" flag
[25] The feature is considered unstable, but can be enabled via --js-flags="--harmony-promise-finally" flag