NativeScript | Desktop browsers | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Feature name | Current browser | NS 6.5 Android v8 |
NS 7.0 Android v8 |
NS 8.0 Android v8 |
NS 6.5 iOS JSC |
NS 7.0 iOS v8 |
NS 8.0 iOS v8 |
CH 89 | CH 90 | SF 14 Beta | SF TP | |
Optimisation | ||||||||||||
§proper tail calls (tail call optimisation) | 0/2 | 0/2 | 0/2 | 2/2 | 0/2 | 0/2 | 0/2 | 0/2 | 2/2 | 2/2 | ||
§direct recursion | No | No | No | Yes | No | No | No | No | Yes | Yes | ||
§mutual recursion | No | No | No | Yes | No | No | No | No | Yes | Yes | ||
Syntax | ||||||||||||
§default function parameters ![]() |
7/7 | 7/7 | 7/7 | 7/7 | 7/7 | 7/7 | 7/7 | 7/7 | 7/7 | 7/7 | ||
§basic functionality | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§explicit undefined defers to the default | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§defaults can refer to previous params | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§arguments object interaction | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§temporal dead zone | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§separate scope | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§new Function() support | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§rest parameters ![]() |
5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | ||
§basic functionality | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§function 'length' property | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§arguments object interaction | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§can't be used in setters | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§new Function() support | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§spread syntax for iterable objects ![]() |
15/15 | 15/15 | 15/15 | 15/15 | 15/15 | 15/15 | 15/15 | 15/15 | 15/15 | 15/15 | ||
§with arrays, in function calls | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with arrays, in array literals | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with sparse arrays, in function calls | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with sparse arrays, in array literals | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with strings, in function calls | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with strings, in array literals | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with astral plane strings, in function calls | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with astral plane strings, in array literals | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with generator instances, in calls | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with generator instances, in arrays | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with generic iterables, in calls | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with generic iterables, in arrays | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with instances of iterables, in calls | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with instances of iterables, in arrays | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§spreading non-iterables is a runtime error | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§object literal extensions ![]() |
6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | ||
§computed properties | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§shorthand properties | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§shorthand methods | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§string-keyed shorthand methods | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§computed shorthand methods | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§computed accessors | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§for..of loops ![]() |
9/9 | 9/9 | 9/9 | 9/9 | 9/9 | 9/9 | 9/9 | 9/9 | 9/9 | 9/9 | ||
§with arrays | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with sparse arrays | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with strings | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with astral plane strings | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with generator instances | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with generic iterables | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with instances of generic iterables | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§iterator closing, break | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§iterator closing, throw | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§octal and binary literals | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | ||
§octal literals | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§binary literals | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§octal supported by Number() | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§binary supported by Number() | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§template literals ![]() |
7/7 | 7/7 | 7/7 | 7/7 | 7/7 | 7/7 | 7/7 | 7/7 | 7/7 | 7/7 | ||
§basic functionality | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§toString conversion | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§tagged template literals | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§passed array is frozen | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§line break normalisation | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§TemplateStrings call site caching | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§TemplateStrings permanent caching | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp "y" and "u" flags ![]() |
5/6 | 5/6 | 5/6 | 5/6 | 5/6 | 5/6 | 6/6 | 6/6 | 6/6 | 6/6 | ||
§"y" flag | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"y" flag, lastIndex | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"u" flag | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"u" flag, non-BMP Unicode characters | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"u" flag, Unicode code point escapes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"u" flag, case folding | No | No | No | No | No | No | Yes | Yes | Yes | Yes | ||
§destructuring, declarations ![]() |
22/22 | 22/22 | 22/22 | 22/22 | 22/22 | 22/22 | 22/22 | 22/22 | 22/22 | 22/22 | ||
§with arrays | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with sparse arrays | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with strings | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with astral plane strings | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with generator instances | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with generic iterables | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with instances of generic iterables | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§iterator closing | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§trailing commas in iterable patterns | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with objects | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§object destructuring with primitives | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§trailing commas in object patterns | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§throws on null and undefined | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§computed properties | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§multiples in a single var statement | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§nested | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§in for-in loop heads | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§in for-of loop heads | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§in catch heads | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§rest | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§defaults | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§defaults, let temporal dead zone | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§destructuring, assignment ![]() |
24/24 | 24/24 | 24/24 | 24/24 | 24/24 | 24/24 | 24/24 | 24/24 | 24/24 | 24/24 | ||
§with arrays | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with sparse arrays | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with strings | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with astral plane strings | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with generator instances | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with generic iterables | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with instances of generic iterables | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§iterator closing | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§iterable destructuring expression | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§chained iterable destructuring | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§trailing commas in iterable patterns | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with objects | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§object destructuring with primitives | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§trailing commas in object patterns | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§object destructuring expression | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§parenthesised left-hand-side is a syntax error | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§chained object destructuring | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§throws on null and undefined | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§computed properties | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§nested | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§rest | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§nested rest | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§empty patterns | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§defaults | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§destructuring, parameters ![]() |
25/25 | 25/25 | 25/25 | 25/25 | 25/25 | 25/25 | 25/25 | 25/25 | 25/25 | 25/25 | ||
§with arrays | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with sparse arrays | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with strings | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with astral plane strings | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with generator instances | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with generic iterables | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with instances of generic iterables | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§iterator closing | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§trailing commas in iterable patterns | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§with objects | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§object destructuring with primitives | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§trailing commas in object patterns | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§throws on null and undefined | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§computed properties | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§nested | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§'arguments' interaction | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§new Function() support | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§in parameters, function 'length' property | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§rest | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§empty patterns | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§defaults | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§defaults, separate scope | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§defaults, new Function() support | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§aliased defaults, arrow function | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§shorthand defaults, arrow function | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Unicode code point escapes | 1/4 | 1/4 | 1/4 | 4/4 | 1/4 | 1/4 | 4/4 | 4/4 | 4/4 | 4/4 | ||
§in strings | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§in identifiers | No | No | No | Yes | No | No | Yes | Yes | Yes | Yes | ||
§in property key definitions | No | No | No | Yes | No | No | Yes | Yes | Yes | Yes | ||
§in property key accesses | No | No | No | Yes | No | No | Yes | Yes | Yes | Yes | ||
§new.target ![]() |
2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | ||
§in constructors | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§assignment is an early error | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
Bindings | ||||||||||||
§const ![]() |
18/18 | 18/18 | 18/18 | 18/18 | 18/18 | 18/18 | 18/18 | 18/18 | 18/18 | 18/18 | ||
§basic support | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§is block-scoped | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§scope shadow resolution | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§cannot be in statements | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§redefining a const is an error | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§for loop statement scope | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§for-in loop iteration scope | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§for-of loop iteration scope | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§temporal dead zone | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§basic support (strict mode) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§is block-scoped (strict mode) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§scope shadow resolution (strict mode) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§cannot be in statements (strict mode) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§redefining a const (strict mode) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§for loop statement scope (strict mode) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§for-in loop iteration scope (strict mode) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§for-of loop iteration scope (strict mode) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§temporal dead zone (strict mode) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§let ![]() |
16/16 | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 | 16/16 | ||
§basic support | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§is block-scoped | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§scope shadow resolution | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§cannot be in statements | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§for loop statement scope | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§temporal dead zone | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§for/for-in loop iteration scope | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§for-in loop binding shadowing parameter | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§basic support (strict mode) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§is block-scoped (strict mode) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§scope shadow resolution (strict mode) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§cannot be in statements (strict mode) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§for loop statement scope (strict mode) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§temporal dead zone (strict mode) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§for/for-in loop iteration scope (strict mode) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§for-in loop binding shadowing parameter (strict mode) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§block-level function declaration[1] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
Functions | ||||||||||||
§arrow functions ![]() |
13/13 | 13/13 | 13/13 | 13/13 | 13/13 | 13/13 | 13/13 | 13/13 | 13/13 | 13/13 | ||
§0 parameters | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§1 parameter, no brackets | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§multiple parameters | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§lexical "this" binding | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"this" unchanged by call or apply | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§can't be bound, can be curried | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§lexical "arguments" binding | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§no line break between params and => |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§correct precedence | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§no "prototype" property | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§lexical "super" binding in constructors | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§lexical "super" binding in methods | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§lexical "new.target" binding | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§class ![]() |
24/24 | 24/24 | 24/24 | 24/24 | 24/24 | 24/24 | 24/24 | 24/24 | 24/24 | 24/24 | ||
§class statement | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§is block-scoped | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§class expression | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§anonymous class | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§prototype methods | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§string-keyed methods | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§computed prototype methods | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§optional semicolons | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§static methods | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§computed static methods | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§accessor properties | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§computed accessor properties | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§static accessor properties | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§computed static accessor properties | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§class name is lexically scoped | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§computed names, temporal dead zone | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§methods aren't enumerable | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§implicit strict mode | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor requires new | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§extends | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§extends expressions | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§extends null | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§new.target | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§super ![]() |
8/8 | 8/8 | 8/8 | 8/8 | 8/8 | 8/8 | 8/8 | 8/8 | 8/8 | 8/8 | ||
§statement in constructors | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§expression in constructors | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§in methods, property access | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§in methods, method calls | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§method calls use correct "this" binding | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor calls use correct "new.target" binding | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§is statically bound | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§super() invokes the correct constructor | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§generators ![]() |
27/27 | 27/27 | 27/27 | 27/27 | 27/27 | 27/27 | 27/27 | 27/27 | 27/27 | 27/27 | ||
§basic functionality | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§generator function expressions | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§correct "this" binding | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§can't use "this" with new | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§sending | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%GeneratorPrototype% | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%GeneratorPrototype% prototype chain | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%GeneratorPrototype%.constructor | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%GeneratorPrototype%.throw | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%GeneratorPrototype%.return | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§yield operator precedence | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§yield *, arrays | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§yield *, sparse arrays | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§yield *, strings | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§yield *, astral plane strings | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§yield *, generator instances | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§yield *, generic iterables | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§yield *, instances of iterables | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§yield * on non-iterables is a runtime error | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§yield *, iterator closing | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§yield *, iterator closing via throw() | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§shorthand generator methods | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§string-keyed shorthand generator methods | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§computed shorthand generators | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§shorthand generator methods, classes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§computed shorthand generators, classes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§shorthand generators can't be constructors | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
Built-ins | ||||||||||||
§typed arrays ![]() |
46/46 | 46/46 | 46/46 | 46/46 | 46/46 | 46/46 | 46/46 | 46/46 | 46/46 | 46/46 | ||
§Int8Array ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Uint8Array ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Uint8ClampedArray ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Int16Array ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Uint16Array ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Int32Array ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Uint32Array ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Float32Array ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Float64Array ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§DataView (Int8) ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§DataView (Uint8) ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§DataView (Int16) ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§DataView (Uint16) ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§DataView (Int32) ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§DataView (Uint32) ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§DataView (Float32) ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§DataView (Float64) ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§ArrayBuffer[Symbol.species] ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructors require new | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructors accept generic iterables | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§correct prototype chains | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.from ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.of ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.subarray ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.join ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.indexOf ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.lastIndexOf ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.slice ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.every ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.filter ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.forEach ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.map ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.reduce ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.reduceRight ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.reverse ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.some ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.sort ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.copyWithin ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.find ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.findIndex ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.fill ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.keys ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.values ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype.entries ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%.prototype[Symbol.iterator] ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§%TypedArray%[Symbol.species] ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Map ![]() |
19/19 | 19/19 | 19/19 | 19/19 | 19/19 | 19/19 | 19/19 | 19/19 | 19/19 | 19/19 | ||
§basic functionality | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor arguments | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor requires new | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor accepts null | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor invokes set | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§iterator closing | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Map.prototype.set returns this | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§-0 key converts to +0 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Map.prototype.size ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Map.prototype.delete ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Map.prototype.clear ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Map.prototype.forEach ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Map.prototype.keys ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Map.prototype.values ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Map.prototype.entries ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Map.prototype[Symbol.iterator] ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Map.prototype isn't an instance | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Map iterator prototype chain | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Map[Symbol.species] ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Set ![]() |
19/19 | 19/19 | 19/19 | 19/19 | 19/19 | 19/19 | 19/19 | 19/19 | 19/19 | 19/19 | ||
§basic functionality | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor arguments | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor requires new | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor accepts null | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor invokes add | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§iterator closing | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Set.prototype.add returns this | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§-0 key converts to +0 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Set.prototype.size ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Set.prototype.delete ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Set.prototype.clear ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Set.prototype.forEach ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Set.prototype.keys ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Set.prototype.values ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Set.prototype.entries ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Set.prototype[Symbol.iterator] ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Set.prototype isn't an instance | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Set iterator prototype chain | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Set[Symbol.species] ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§WeakMap ![]() |
12/12 | 12/12 | 12/12 | 12/12 | 12/12 | 12/12 | 12/12 | 12/12 | 12/12 | 12/12 | ||
§basic functionality | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor arguments | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor requires new | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor accepts null | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor invokes set | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§frozen objects as keys | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§iterator closing | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§WeakMap.prototype.set returns this ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§WeakMap.prototype.delete ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§no WeakMap.prototype.clear method ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§.has, .get and .delete methods accept primitives | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§WeakMap.prototype isn't an instance | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§WeakSet ![]() |
11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | ||
§basic functionality | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor arguments | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor requires new | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor accepts null | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor invokes add | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§iterator closing | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§WeakSet.prototype.add returns this | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§WeakSet.prototype.delete | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§no WeakSet.prototype.clear method | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§.has and .delete methods accept primitives | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§WeakSet.prototype isn't an instance | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Proxy ![]() |
34/34 | 34/34 | 34/34 | 34/34 | 34/34 | 34/34 | 34/34 | 34/34 | 34/34 | 34/34 | ||
§constructor requires new | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§no "prototype" property | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"get" handler ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"get" handler, instances of proxies | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"get" handler invariants | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"set" handler ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"set" handler, instances of proxies | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"set" handler invariants | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"has" handler ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"has" handler, instances of proxies | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"has" handler invariants | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"deleteProperty" handler ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"deleteProperty" handler invariant | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"getOwnPropertyDescriptor" handler ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"getOwnPropertyDescriptor" handler invariants | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"defineProperty" handler ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"defineProperty" handler invariants | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"getPrototypeOf" handler ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"getPrototypeOf" handler invariant | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"setPrototypeOf" handler ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"setPrototypeOf" handler invariant | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"isExtensible" handler ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"isExtensible" handler invariant | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"preventExtensions" handler ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"preventExtensions" handler invariant | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"ownKeys" handler ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"ownKeys" handler invariant | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"apply" handler ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"apply" handler invariant | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"construct" handler ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§"construct" handler invariants | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Proxy.revocable ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.isArray support | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§JSON.stringify support | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect ![]() |
20/20 | 20/20 | 20/20 | 20/20 | 19/20 | 19/20 | 20/20 | 20/20 | 20/20 | 20/20 | ||
§Reflect.get ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.set ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.has ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.deleteProperty ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.getOwnPropertyDescriptor ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.defineProperty ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.getPrototypeOf ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.setPrototypeOf ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.isExtensible ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.preventExtensions ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.ownKeys, string keys ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.ownKeys, symbol keys ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.apply ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.construct ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.construct sets new.target meta-property | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.construct creates instances from third argument | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.construct, Array subclassing | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.construct, RegExp subclassing | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.construct, Function subclassing | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.construct, Promise subclassing | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | ||
§Promise ![]() |
8/8 | 8/8 | 8/8 | 8/8 | 8/8 | 8/8 | 8/8 | 8/8 | 8/8 | 8/8 | ||
§basic functionality ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§constructor requires new | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Promise.prototype isn't an instance | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Promise.all ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Promise.all, generic iterables | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Promise.race ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Promise.race, generic iterables | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Promise[Symbol.species] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol ![]() |
12/12 | 12/12 | 12/12 | 12/12 | 12/12 | 12/12 | 12/12 | 12/12 | 12/12 | 12/12 | ||
§basic functionality | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§typeof support | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.defineProperty support | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§symbols inherit from Symbol.prototype | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§cannot coerce to string or number | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§can convert with String() | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§new Symbol() throws | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object(symbol) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§JSON.stringify ignores symbol primitives | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§JSON.stringify ignores symbol objects | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§global symbol registry | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§well-known symbols[4] | 26/26 | 26/26 | 26/26 | 26/26 | 26/26 | 26/26 | 26/26 | 26/26 | 26/26 | 26/26 | ||
§Symbol.hasInstance ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.isConcatSpreadable ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.iterator, existence ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.iterator, arguments object | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.species, existence ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.species, Array.prototype.concat | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.species, Array.prototype.filter | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.species, Array.prototype.map | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.species, Array.prototype.slice | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.species, Array.prototype.splice | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.species, RegExp.prototype[Symbol.split] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.species, Promise.prototype.then | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.replace ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.search ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.split ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.match ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.match, RegExp constructor | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.match, String.prototype.startsWith | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.match, String.prototype.endsWith | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.match, String.prototype.includes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.toPrimitive ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.toStringTag ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.toStringTag affects existing built-ins | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.toStringTag, new built-ins | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.toStringTag, misc. built-ins | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Symbol.unscopables ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
Built-in extensions | ||||||||||||
§Object static methods | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | ||
§Object.assign ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.is ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.getOwnPropertySymbols ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.setPrototypeOf ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§function "name" property ![]() |
17/17 | 17/17 | 17/17 | 17/17 | 17/17 | 17/17 | 17/17 | 17/17 | 17/17 | 17/17 | ||
§function statements | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§function expressions | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§new Function | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§bound functions | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§variables (function) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§object methods (function) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§accessor properties | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§shorthand methods | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§shorthand methods (no lexical binding) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§symbol-keyed methods | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§class statements | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§class expressions | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§variables (class) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§object methods (class) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§class prototype methods | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§class static methods | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§isn't writable, is configurable | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§String static methods | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | ||
§String.raw ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§String.fromCodePoint ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§String.prototype methods | 9/10 | 9/10 | 9/10 | 10/10 | 9/10 | 9/10 | 10/10 | 10/10 | 10/10 | 10/10 | ||
§String.prototype.codePointAt ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§String.prototype.normalize ![]() |
No | No | No | Yes | No | No | Yes | Yes | Yes | Yes | ||
§String.prototype.repeat ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§String.prototype.startsWith ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§String.prototype.startsWith throws on RegExp | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§String.prototype.endsWith ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§String.prototype.endsWith throws on RegExp | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§String.prototype.includes ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§String.prototype[Symbol.iterator] ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§String iterator prototype chain | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp.prototype properties ![]() |
6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | ||
§RegExp.prototype.flags ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp.prototype[Symbol.match] ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp.prototype[Symbol.replace] ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp.prototype[Symbol.split] ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp.prototype[Symbol.search] ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp[Symbol.species] ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array static methods | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | ||
§Array.from, array-like objects ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.from, generator instances | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.from, generic iterables | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.from, instances of generic iterables | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.from map function, array-like objects | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.from map function, generator instances | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.from map function, generic iterables | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.from map function, instances of iterables | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.from, iterator closing | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.of ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array[Symbol.species] ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype methods | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | ||
§Array.prototype.copyWithin ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.find ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.findIndex ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.fill ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.keys ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.values ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.entries ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype[Symbol.iterator] ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array iterator prototype chain | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype[Symbol.unscopables] ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Number properties | 9/9 | 9/9 | 9/9 | 9/9 | 9/9 | 9/9 | 9/9 | 9/9 | 9/9 | 9/9 | ||
§Number.isFinite ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Number.isInteger ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Number.isSafeInteger ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Number.isNaN ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Number.parseFloat ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Number.parseInt ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Number.EPSILON ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Number.MIN_SAFE_INTEGER ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Number.MAX_SAFE_INTEGER ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Math methods | 17/17 | 17/17 | 17/17 | 17/17 | 17/17 | 17/17 | 17/17 | 17/17 | 17/17 | 17/17 | ||
§Math.clz32 ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Math.imul ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Math.sign ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Math.log10 ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Math.log2 ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Math.log1p ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Math.expm1 ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Math.cosh ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Math.sinh ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Math.tanh ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Math.acosh ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Math.asinh ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Math.atanh ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Math.trunc ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Math.fround ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Math.cbrt ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Math.hypot ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Date.prototype[Symbol.toPrimitive] ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
Subclassing | ||||||||||||
§Array is subclassable | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | ||
§length property (accessing) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§length property (setting) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§correct prototype chain | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.isArray support | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.concat | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.filter | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.map | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.slice | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.splice | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.from | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.of | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp is subclassable | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | ||
§basic functionality | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§correct prototype chain | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp.prototype.exec | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp.prototype.test | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Function is subclassable | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | ||
§can be called | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§correct prototype chain | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§can be used with "new" | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Function.prototype.call | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Function.prototype.apply | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Function.prototype.bind | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Promise is subclassable | 4/4 | 4/4 | 4/4 | 4/4 | 0/4 | 0/4 | 4/4 | 4/4 | 4/4 | 4/4 | ||
§basic functionality | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | ||
§correct prototype chain | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | ||
§Promise.all | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | ||
§Promise.race | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | ||
§miscellaneous subclassables | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | ||
§Boolean is subclassable | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Number is subclassable | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§String is subclassable | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Error is subclassable | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Map is subclassable | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Set is subclassable | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
Misc | ||||||||||||
§prototype of bound functions | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | ||
§basic functions | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§generator functions | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§arrow functions | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§classes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§subclasses | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Proxy, internal 'get' calls ![]() |
36/36 | 36/36 | 36/36 | 36/36 | 35/36 | 35/36 | 36/36 | 36/36 | 36/36 | 36/36 | ||
§ToPrimitive | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§CreateListFromArrayLike | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§instanceof operator | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§HasBinding | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§CreateDynamicFunction | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§ClassDefinitionEvaluation | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§IteratorComplete, IteratorValue | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§ToPropertyDescriptor | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.assign | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.defineProperties | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Function.prototype.bind | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Error.prototype.toString | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§String.raw | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp constructor | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp.prototype.flags | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp.prototype.test | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp.prototype.toString | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp.prototype[Symbol.match] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp.prototype[Symbol.replace] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp.prototype[Symbol.search] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp.prototype[Symbol.split] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.from | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.concat | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype iteration methods | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.pop | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.reverse | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.shift | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.splice | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.toString | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§JSON.stringify | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Promise resolve functions | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | ||
§String.prototype.match | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§String.prototype.replace | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§String.prototype.search | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§String.prototype.split | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Date.prototype.toJSON | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Proxy, internal 'set' calls ![]() |
11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | 11/11 | ||
§Object.assign | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.from | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.of | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.copyWithin | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.fill | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.pop | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.push | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.reverse | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.shift | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.splice | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.unshift | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Proxy, internal 'defineProperty' calls ![]() |
2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | ||
§[[Set]] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§SetIntegrityLevel | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Proxy, internal 'deleteProperty' calls ![]() |
6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | ||
§Array.prototype.copyWithin | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.pop | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.reverse | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.shift | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.splice | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Array.prototype.unshift | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Proxy, internal 'getOwnPropertyDescriptor' calls ![]() |
4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 | ||
§[[Set]] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.assign | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.prototype.hasOwnProperty | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Function.prototype.bind | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Proxy, internal 'ownKeys' calls ![]() |
3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | ||
§SetIntegrityLevel | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§TestIntegrityLevel | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§SerializeJSONObject | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object static methods accept primitives | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | ||
§Object.getPrototypeOf ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.getOwnPropertyDescriptor ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.getOwnPropertyNames ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.seal ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.freeze ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.preventExtensions ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.isSealed ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.isFrozen ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.isExtensible ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.keys ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§own property order | 7/7 | 7/7 | 7/7 | 7/7 | 7/7 | 7/7 | 7/7 | 7/7 | 7/7 | 7/7 | ||
§Object.keys | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.getOwnPropertyNames | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.assign | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§JSON.stringify | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§JSON.parse | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.ownKeys, string key order | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Reflect.ownKeys, symbol key order | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Updated identifier syntax | 2/3 | 2/3 | 2/3 | 2/3 | 2/3 | 2/3 | 3/3 | 3/3 | 3/3 | 3/3 | ||
§var ⸯ; | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§var 𐋀; | No | No | No | No | No | No | Yes | Yes | Yes | Yes | ||
§no escaped reserved words as identifiers | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§miscellaneous | 9/9 | 9/9 | 9/9 | 9/9 | 9/9 | 9/9 | 9/9 | 9/9 | 9/9 | 9/9 | ||
§duplicate property names in strict mode | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§no semicolon needed after do-while | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§no assignments allowed in for-in head in strict mode | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§accessors aren't constructors | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Invalid Date | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp constructor can alter flags | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp.prototype.toString generic and uses "flags" property | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§built-in prototypes are not instances | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§function 'length' is configurable | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
Annex b | ||||||||||||
§non-strict function semantics[5] | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | ||
§hoisted block-level function declaration | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§labeled function statements | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§function statements in if-statement clauses | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§__proto__ in object literals ![]() |
5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | ||
§basic support | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§multiple __proto__ is an error | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§not a computed property | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§not a shorthand property | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§not a shorthand method | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§Object.prototype.__proto__ ![]() |
6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | 6/6 | ||
§get prototype | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§set prototype | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§absent from Object.create(null) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§present in hasOwnProperty() | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§correct property descriptor | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§present in Object.getOwnPropertyNames() | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§String.prototype HTML methods | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | ||
§existence ![]() |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§tags' names are lowercase | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§quotes in arguments are escaped | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp.prototype.compile ![]() |
2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | ||
§basic functionality | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§returns this | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§RegExp syntax extensions | 8/8 | 8/8 | 8/8 | 8/8 | 8/8 | 8/8 | 8/8 | 8/8 | 8/8 | 8/8 | ||
§hyphens in character sets | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§invalid character escapes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§invalid control-character escapes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§invalid Unicode escapes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§invalid hexadecimal escapes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§incomplete patterns and quantifiers | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§octal escape sequences | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§invalid backreferences become octal escapes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
§HTML-style comments | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
[1] Note that prior to ES6, it was recommended that ES5 implementations forbid block-level declarations in strict mode.
[2] The 2015 version of the specification also specifies an "enumerate" handler, which was removed in the 2016 version.
[3] The 2015 version of the specification also specifies Reflect.enumerate, which was removed in the 2016 version.
[4] Functionality for Symbol.iterator
is tested by the "generic iterators" subtests for the spread (...) operator, for..of loops, destructuring, yield *, and Array.from.
[5] The 2015 version of the specification contains multiple bugs for hoisted block-level function declaration semantics, which these tests disregard.
[6] Note that this is distinct from the existence or functionality of Object.prototype.__proto__
.