JavaScript engine feature support
Compare ECMAScript features between the ECMAScript 2021 (ES12) and ES5 Standards JavaScript modes in Yokohama. Both modes support a subset of ECMAScript features.
For more information about these features, see the ECMAScript language specifications (ECMA-262) on the Ecma International website.
Support definitions
- Supported
- The feature has been tested and validated.
- Not Supported
- The feature has not been validated in the current release.
- Disallowed
- The feature does not align with the ServiceNow AI Platform programming model or poses a security or performance risk. Disallowed features result in an error.
ECMAScript 2022 (ES13) features
Important:
Before deploying code to production, you should test scripts using supported ECMAScript 2022 (ES13) features thoroughly due to the newly added and partial support of features across this ECMAScript
version.
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| public instance class fields | Supported | Not Supported |
| private instance class fields basic support | Not Supported | Not Supported |
| private instance class fields initializers | Not Supported | Not Supported |
| optional private instance class fields access | Not Supported | Not Supported |
| optional deep private instance class fields access | Not Supported | Not Supported |
| computed instance class fields | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| public static class fields | Supported | Not Supported |
| static class fields use [[Define]] | Supported | Not Supported |
| private static class fields | Supported | Not Supported |
| computed static class fields | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| private instance methods | Not Supported | Not Supported |
| private static methods | Supported | Not Supported |
| private accessor properties | Not Supported | Not Supported |
| private static accessor properties | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Array.prototype.at() | Not Supported | Not Supported |
| String.prototype.at() | Supported | Not Supported |
| %TypedArray%.prototype.at() | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Basic functionality | Not Supported | Not Supported |
| ToObject called before ToPropertyKey | Not Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Error has cause | Supported | Not Supported |
| Error.prototype lacks cause | Supported | Not Supported |
| EvalError has cause | Supported | Not Supported |
| EvalError.prototype lacks cause | Supported | Not Supported |
| RangeError has cause | Supported | Not Supported |
| RangeError.prototype lacks cause | Supported | Not Supported |
| ReferenceError has cause | Supported | Not Supported |
| ReferenceError.prototype lacks cause | Supported | Not Supported |
| SyntaxError has cause | Supported | Not Supported |
| SyntaxError.prototype lacks cause | Supported | Not Supported |
| TypeError has cause | Supported | Not Supported |
| TypeError.prototype lacks cause | Supported | Not Supported |
| URIError has cause | Supported | Not Supported |
| URIError.prototype lacks cause | Supported | Not Supported |
| AggregateError has cause | Supported | Not Supported |
| AggregateError.prototype lacks cause | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| constructor supports it | Not Supported | Not Supported |
| shows up in flags | Not Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Ergonomic brand checks for private fields | Not Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Class static initialization blocks | Supported | Not Supported |
ECMAScript 2021 (ES12) features
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| fulfillment | Disallowed | Disallowed |
| AggregateError | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| WeakRef minimal support | Disallowed | Disallowed |
| FinalizationRegistry minimal support | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| ||= basic support | Supported | Not Supported |
| ||= short-circuiting behavior | Supported | Not Supported |
| ||= setter not unnecessarily invoked | Supported | Not Supported |
| &&= basic support | Supported | Not Supported |
| &&= short-circuiting behavior | Supported | Not Supported |
| &&= setter not unnecessarily invoked | Supported | Not Supported |
| ??= basic support | Supported | Not Supported |
| ??= short-circuiting behavior | Supported | Not Supported |
| ??= setter not unnecessarily invoked | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| numeric separators | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| String.prototype.replaceAll | Supported | Supported |
ECMAScript 2020 (ES11) features
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic functionality | Supported | Not Supported |
| throws on non-global regex | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic functionality | Not Supported | Not Supported |
| constructor | Not Supported | Not Supported |
| BigInt.asUintN | Not Supported | Not Supported |
| BigInt.asIntN | Not Supported | Not Supported |
| BigInt64Array | Not Supported | Not Supported |
| BigUint64Array | Not Supported | Not Supported |
| DataView.prototype.getBigInt64 | Not Supported | Not Supported |
| DataView.prototype.getBigUint64 | Not Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| "globalThis" global property is global object | Disallowed | Disallowed |
| "globalThis" global property has correct property descriptor | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| optional property access | Supported | Not Supported |
| optional bracket access | Supported | Not Supported |
| optional method call | Supported | Not Supported |
| optional function call | Supported | Not Supported |
| spread parameters after optional chaining | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Promise.allSettled | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| nullish coalescing operator (??) | Supported | Not Supported |
ECMAScript 2019 (ES10) features
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic | Supported | Not Supported |
| empty description | Supported | Not Supported |
| undefined description | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| String.prototype.trimLeft | Supported | Supported |
| String.prototype.trimRight | Supported | Supported |
| String.prototype.trimStart | Supported | Not Supported |
| String.prototype.trimEnd | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Array.prototype.flat | Supported | Not Supported |
| Array.prototype.flatMap | Supported | Not Supported |
| flat and flatMap in Array.prototype[@@unscopables] | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Object.fromEntries | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic | Disallowed | Disallowed |
| await | Disallowed | Disallowed |
| yield | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| functions created with the Function constructor | Disallowed | Disallowed |
| arrows | Disallowed | Disallowed |
| [native code] | Disallowed | Disallowed |
| class expression with implicit constructor | Disallowed | Disallowed |
| class expression with explicit constructor | Disallowed | Disallowed |
| unicode escape sequences in identifiers | Disallowed | Disallowed |
| methods and computed property names | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Line separator can appear in string literals | Disallowed | Disallowed |
| Paragraph separator can appear in string literals | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Well-formed JSON.stringify | Disallowed | Disallowed |
ECMAScript 2018 (ES9) features
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| object rest properties | Supported | Not Supported |
| object spread properties | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic support | Disallowed | Disallowed |
| don't change resolution value | Disallowed | Disallowed |
| change rejection value | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| async generators | Disallowed | Disallowed |
| for-await-of loops | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| s (dotAll) flag for regular expressions | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| RegExp named capture groups | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| RegExp Lookbehind Assertions | Not Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| RegExp Unicode Property Escapes | Not Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| template literal revision | Disallowed | Disallowed |
ECMAScript 2017 (ES8) features
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Object.values | Supported | Not Supported |
| Object.entries | Supported | Not Supported |
| Object.getOwnPropertyDescriptors | Supported | Not Supported |
| Object.getOwnPropertyDescriptors doesn't provide undefined descriptors | Not Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| String.prototype.padStart | Supported | Not Supported |
| String.prototype.padEnd | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| in parameter lists | Supported | Not Supported |
| in argument lists | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| return | Disallowed | Disallowed |
| throw | Disallowed | Disallowed |
| no line break between async and function | Disallowed | Disallowed |
| no "prototype" property | Disallowed | Disallowed |
| await | Disallowed | Disallowed |
| await, rejection | Disallowed | Disallowed |
| must await a value | Disallowed | Disallowed |
| can await non-Promise values | Disallowed | Disallowed |
| cannot await in parameters | Disallowed | Disallowed |
| async methods, object literals | Disallowed | Disallowed |
| async methods, classes | Disallowed | Disallowed |
| async arrow functions in methods, classes | Disallowed | Disallowed |
| async arrow functions | Disallowed | Disallowed |
| correct prototype chain | Disallowed | Disallowed |
| async function prototype, Symbol.toStringTag | Disallowed | Disallowed |
| async function constructor | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| SharedArrayBuffer | Disallowed | Disallowed |
| SharedArrayBuffer[Symbol.species] | Disallowed | Disallowed |
| SharedArrayBuffer.prototype.byteLength | Disallowed | Disallowed |
| SharedArrayBuffer.prototype.slice | Disallowed | Disallowed |
| SharedArrayBuffer.prototype[Symbol.toStringTag] | Disallowed | Disallowed |
| Atomics.add | Disallowed | Disallowed |
| Atomics.and | Disallowed | Disallowed |
| Atomics.compareExchange | Disallowed | Disallowed |
| Atomics.exchange | Disallowed | Disallowed |
| Atomics.wait | Disallowed | Disallowed |
| Atomics.wake | Disallowed | Disallowed |
| Atomics.isLockFree | Disallowed | Disallowed |
| Atomics.load | Disallowed | Disallowed |
| Atomics.or | Disallowed | Disallowed |
| Atomics.store | Disallowed | Disallowed |
| Atomics.sub | Disallowed | Disallowed |
| Atomics.xor | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| __defineGetter__ | Disallowed | Disallowed |
| __defineGetter__, symbols | Disallowed | Disallowed |
| __defineGetter__, ToObject(this) | Disallowed | Disallowed |
| __defineSetter__ | Disallowed | Disallowed |
| __defineSetter__, symbols | Disallowed | Disallowed |
| __defineSetter__, ToObject(this) | Disallowed | Disallowed |
| __lookupGetter__ | Disallowed | Disallowed |
| __lookupGetter__, prototype chain | Disallowed | Disallowed |
| __lookupGetter__, symbols | Disallowed | Disallowed |
| __lookupGetter__, ToObject(this) | Disallowed | Disallowed |
| __lookupGetter__, data properties can shadow accessors | Disallowed | Disallowed |
| __lookupSetter__ | Disallowed | Disallowed |
| __lookupSetter__, prototype chain | Disallowed | Disallowed |
| __lookupSetter__, symbols | Disallowed | Disallowed |
| __lookupSetter__, ToObject(this) | Disallowed | Disallowed |
| __lookupSetter__, data properties can shadow accessors | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| __defineGetter__ | Disallowed | Disallowed |
| __defineSetter__ | Disallowed | Disallowed |
| __lookupGetter__ | Disallowed | Disallowed |
| __lookupSetter__ | Disallowed | Disallowed |
ECMAScript 2016 (ES7) features
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic support | Supported | Not Supported |
| assignment | Supported | Not Supported |
| early syntax error for unary negation without parentheses | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Array.prototype.includes | Supported | Not Supported |
| Array.prototype.includes is generic | Not Supported | Not Supported |
| %TypedArray%.prototype.includes | Disallowed | Disallowed |
ECMAScript 2015 (ES6) features
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| direct recursion | Disallowed | Disallowed |
| mutual recursion | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic functionality | Supported | Not Supported |
| explicit undefined defers to the default | Supported | Not Supported |
| defaults can refer to previous parameters | Supported | Not Supported |
| arguments object interaction | Supported | Not Supported |
| temporal dead zone | Disallowed | Disallowed |
| separate scope | Supported | Not Supported |
| new Function() support | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic functionality | Supported | Not Supported |
| function 'length' property | Supported | Not Supported |
| arguments object interaction | Not Supported | Not Supported |
| can't be used in setters | Disallowed | Disallowed |
| new Function() support | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| with arrays, in function calls | Supported | Not Supported |
| with arrays, in array literals | Supported | Not Supported |
| with sparse arrays, in function calls | Supported | Not Supported |
| with sparse arrays, in array literals | Supported | Not Supported |
| with strings, in function calls | Supported | Not Supported |
| with strings, in array literals | Supported | Not Supported |
| with astral plane strings, in function calls | Supported | Not Supported |
| with astral plane strings, in array literals | Supported | Not Supported |
| with generator instances, in calls | Disallowed | Disallowed |
| with generator instances, in arrays | Disallowed | Disallowed |
| with generic iterables, in calls | Supported | Not Supported |
| with generic iterables, in arrays | Supported | Not Supported |
| with instances of iterables, in calls | Supported | Not Supported |
| with instances of iterables, in arrays | Supported | Not Supported |
| spreading non-iterables is a runtime error | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| computed properties | Supported | Not Supported |
| shorthand properties | Supported | Not Supported |
| shorthand methods | Supported | Not Supported |
| string-keyed shorthand methods | Supported | Not Supported |
| computed shorthand methods | Supported | Not Supported |
| computed accessors | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| with arrays | Supported | Not Supported |
| with sparse arrays | Supported | Not Supported |
| with strings | Supported | Not Supported |
| with astral plane strings | Supported | Not Supported |
| with generator instances | Disallowed | Disallowed |
| with generic iterables | Supported | Not Supported |
| with instances of generic iterables | Supported | Not Supported |
| iterator closing, break | Supported | Not Supported |
| iterator closing, throw | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| octal literals | Supported | Not Supported |
| binary literals | Supported | Not Supported |
| octal supported by Number() | Not Supported | Not Supported |
| binary supported by Number() | Not Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic functionality | Supported | Not Supported |
| toString conversion | Supported | Not Supported |
| tagged template literals | Supported | Not Supported |
| passed array is frozen | Supported | Not Supported |
| line break normalization | Disallowed | Disallowed |
| TemplateStrings call site caching | Supported | Not Supported |
| TemplateStrings permanent caching | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| "y" flag | Supported | Not Supported |
| "y" flag, lastIndex | Supported | Not Supported |
| "u" flag | Not Supported | Not Supported |
| "u" flag, non-BMP Unicode characters | Not Supported | Not Supported |
| "u" flag, Unicode code point escapes | Not Supported | Not Supported |
| "u" flag, case folding | Not Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| with arrays | Supported | Not Supported |
| with sparse arrays | Supported | Not Supported |
| with strings | Supported | Not Supported |
| with astral plane strings | Supported | Not Supported |
| with generator instances | Disallowed | Disallowed |
| with generic iterables | Supported | Not Supported |
| with instances of generic iterables | Supported | Not Supported |
| iterator closing | Supported | Not Supported |
| trailing commas in iterable patterns | Supported | Not Supported |
| with objects | Supported | Not Supported |
| object destructuring with primitives | Supported | Not Supported |
| trailing commas in object patterns | Supported | Not Supported |
| throws on null and undefined | Supported | Not Supported |
| computed properties | Supported | Not Supported |
| multiples in a single var statement | Supported | Not Supported |
| nested | Supported | Not Supported |
| in for-in loop heads | Supported | Not Supported |
| in for-of loop heads | Supported | Not Supported |
| in catch heads | Supported | Not Supported |
| rest | Supported | Not Supported |
| defaults | Supported | Not Supported |
| defaults, let temporal dead zone | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| with arrays | Supported | Not Supported |
| with sparse arrays | Supported | Not Supported |
| with strings | Supported | Not Supported |
| with astral plane strings | Supported | Not Supported |
| with generator instances | Disallowed | Disallowed |
| with generic iterables | Supported | Not Supported |
| with instances of generic iterables | Supported | Not Supported |
| iterator closing | Supported | Not Supported |
| iterable destructuring expression | Supported | Not Supported |
| chained iterable destructuring | Supported | Not Supported |
| trailing commas in iterable patterns | Supported | Not Supported |
| with objects | Supported | Not Supported |
| object destructuring with primitives | Supported | Not Supported |
| trailing commas in object patterns | Supported | Not Supported |
| object destructuring expression | Supported | Not Supported |
| parenthesized left-hand-side is a syntax error | Disallowed | Disallowed |
| chained object destructuring | Supported | Not Supported |
| throws on null and undefined | Supported | Not Supported |
| computed properties | Supported | Not Supported |
| nested | Supported | Not Supported |
| rest | Supported | Not Supported |
| nested rest | Supported | Not Supported |
| empty patterns | Supported | Not Supported |
| defaults | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| with arrays | Supported | Not Supported |
| with sparse arrays | Supported | Not Supported |
| with strings | Supported | Not Supported |
| with astral plane strings | Supported | Not Supported |
| with generator instances | Disallowed | Disallowed |
| with generic iterables | Supported | Not Supported |
| with instances of generic iterables | Supported | Not Supported |
| iterator closing | Supported | Not Supported |
| trailing commas in iterable patterns | Supported | Not Supported |
| with objects | Supported | Not Supported |
| object destructuring with primitives | Supported | Not Supported |
| trailing commas in object patterns | Supported | Not Supported |
| throws on null and undefined | Supported | Not Supported |
| computed properties | Supported | Not Supported |
| nested | Supported | Not Supported |
| 'arguments' interaction | Supported | Not Supported |
| new Function() support | Disallowed | Disallowed |
| in parameters, function 'length' property | Supported | Not Supported |
| rest | Supported | Not Supported |
| empty patterns | Supported | Not Supported |
| defaults | Supported | Not Supported |
| defaults, separate scope | Supported | Not Supported |
| defaults, new Function() support | Disallowed | Disallowed |
| aliased defaults, arrow function | Supported | Not Supported |
| shorthand defaults, arrow function | Supported | Not Supported |
| duplicate identifier | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| in strings | Supported | Not Supported |
| in identifiers | Not Supported | Not Supported |
| in property key definitions | Not Supported | Not Supported |
| in property key accesses | Not Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| in constructors | Not Supported | Not Supported |
| assignment is an early error | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic support | Supported | Supported |
| is block-scoped | Supported | Not Supported |
| scope shadow resolution | Supported | Not Supported |
| cannot be in statements | Disallowed | Disallowed |
| redefining a const is an error | Disallowed | Disallowed |
| for loop statement scope | Supported | Not Supported |
| for-in loop iteration scope | Supported | Not Supported |
| for-of loop iteration scope | Supported | Not Supported |
| temporal dead zone | Not Supported | Not Supported |
| basic support (strict mode) | Supported | Supported |
| is block-scoped (strict mode) | Supported | Not Supported |
| scope shadow resolution (strict mode) | Supported | Not Supported |
| cannot be in statements (strict mode) | Disallowed | Disallowed |
| redefining a const (strict mode) | Disallowed | Disallowed |
| for loop statement scope (strict mode) | Supported | Not Supported |
| for-in loop iteration scope (strict mode) | Supported | Not Supported |
| for-of loop iteration scope (strict mode) | Supported | Not Supported |
| temporal dead zone (strict mode) | Not Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic support | Supported | Not Supported |
| is block-scoped | Supported | Not Supported |
| scope shadow resolution | Supported | Not Supported |
| cannot be in statements | Disallowed | Disallowed |
| for loop statement scope | Supported | Not Supported |
| temporal dead zone | Not Supported | Not Supported |
| for/for-in loop iteration scope | Supported | Not Supported |
| for-in loop binding shadowing parameter | Disallowed | Disallowed |
| basic support (strict mode) | Supported | Not Supported |
| is block-scoped (strict mode) | Supported | Not Supported |
| scope shadow resolution (strict mode) | Supported | Not Supported |
| cannot be in statements (strict mode) | Disallowed | Disallowed |
| for loop statement scope (strict mode) | Supported | Not Supported |
| temporal dead zone (strict mode) | Not Supported | Not Supported |
| for/for-in loop iteration scope (strict mode) | Supported | Not Supported |
| for-in loop binding shadowing parameter (strict mode) | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| block-level function declaration | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| 0 parameters | Supported | Not Supported |
| 1 parameter, no brackets | Supported | Not Supported |
| multiple parameters | Supported | Not Supported |
| lexical "this" binding | Supported | Not Supported |
| "this" unchanged by call or apply | Supported | Not Supported |
| can't be bound, can be curried | Supported | Not Supported |
| lexical "arguments" binding | Supported | Not Supported |
no line break between parameters and => |
Disallowed | Disallowed |
| correct precedence | Disallowed | Disallowed |
| no "prototype" property | Not Supported | Not Supported |
| lexical "super" binding in constructors | Supported | Not Supported |
| lexical "super" binding in methods | Supported | Not Supported |
| lexical "new.target" binding | Not Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| class statement | Supported | Not Supported |
| is block-scoped | Supported | Not Supported |
| class expression | Supported | Not Supported |
| anonymous class | Supported | Not Supported |
| constructor | Supported | Not Supported |
| prototype methods | Supported | Not Supported |
| string-keyed methods | Supported | Not Supported |
| computed prototype methods | Supported | Not Supported |
| optional semicolons | Supported | Not Supported |
| static methods | Supported | Not Supported |
| computed static methods | Supported | Not Supported |
| accessor properties | Supported | Not Supported |
| computed accessor properties | Supported | Not Supported |
| static accessor properties | Supported | Not Supported |
| computed static accessor properties | Supported | Not Supported |
| class name is lexically scoped | Supported | Not Supported |
| computed names, temporal dead zone | Not Supported | Not Supported |
| methods aren't enumerable | Supported | Not Supported |
| implicit strict mode | Not Supported | Not Supported |
| constructor requires new | Supported | Not Supported |
| extends | Supported | Not Supported |
| extends expressions | Supported | Not Supported |
| extends null | Supported | Not Supported |
| new.target | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| statement in constructors | Supported | Not Supported |
| expression in constructors | Supported | Not Supported |
| in methods, property access | Supported | Not Supported |
| in methods, method calls | Supported | Not Supported |
| method calls use correct "this" binding | Supported | Not Supported |
| constructor calls use correct "new.target" binding | Supported | Not Supported |
| is statically bound | Supported | Not Supported |
| super() invokes the correct constructor | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic functionality | Disallowed | Disallowed |
| generator function expressions | Disallowed | Disallowed |
| correct "this" binding | Disallowed | Disallowed |
| can't use "this" with new | Disallowed | Disallowed |
| sending | Disallowed | Disallowed |
| %GeneratorPrototype% | Disallowed | Disallowed |
| %GeneratorPrototype% prototype chain | Disallowed | Disallowed |
| %GeneratorPrototype%.constructor | Disallowed | Disallowed |
| %GeneratorPrototype%.throw | Disallowed | Disallowed |
| %GeneratorPrototype%.return | Disallowed | Disallowed |
| yield operator precedence | Disallowed | Disallowed |
| yield *, arrays | Disallowed | Disallowed |
| yield *, sparse arrays | Disallowed | Disallowed |
| yield *, strings | Disallowed | Disallowed |
| yield *, astral plane strings | Disallowed | Disallowed |
| yield *, generator instances | Disallowed | Disallowed |
| yield *, generic iterables | Disallowed | Disallowed |
| yield *, instances of iterables | Disallowed | Disallowed |
| yield * on non-iterables is a runtime error | Disallowed | Disallowed |
| yield *, iterator closing | Disallowed | Disallowed |
| yield *, iterator closing via throw() | Disallowed | Disallowed |
| shorthand generator methods | Disallowed | Disallowed |
| string-keyed shorthand generator methods | Disallowed | Disallowed |
| computed shorthand generators | Disallowed | Disallowed |
| shorthand generator methods, classes | Disallowed | Disallowed |
| computed shorthand generators, classes | Disallowed | Disallowed |
| shorthand generators can't be constructors | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Int8Array | Disallowed | Disallowed |
| Uint8Array | Disallowed | Disallowed |
| Uint8ClampedArray | Disallowed | Disallowed |
| Int16Array | Disallowed | Disallowed |
| Uint16Array | Disallowed | Disallowed |
| Int32Array | Disallowed | Disallowed |
| Uint32Array | Disallowed | Disallowed |
| Float32Array | Disallowed | Disallowed |
| Float64Array | Disallowed | Disallowed |
| DataView (Int8) | Disallowed | Disallowed |
| DataView (Uint8) | Disallowed | Disallowed |
| DataView (Int16) | Disallowed | Disallowed |
| DataView (Uint16) | Disallowed | Disallowed |
| DataView (Int32) | Disallowed | Disallowed |
| DataView (Uint32) | Disallowed | Disallowed |
| DataView (Float32) | Disallowed | Disallowed |
| DataView (Float64) | Disallowed | Disallowed |
| ArrayBuffer[Symbol.species] | Disallowed | Disallowed |
| constructors require new | Disallowed | Disallowed |
| constructors accept generic iterables | Disallowed | Disallowed |
| correct prototype chains | Disallowed | Disallowed |
| %TypedArray%.from | Disallowed | Disallowed |
| %TypedArray%.of | Disallowed | Disallowed |
| %TypedArray%.prototype.subarray | Disallowed | Disallowed |
| %TypedArray%.prototype.join | Disallowed | Disallowed |
| %TypedArray%.prototype.indexOf | Disallowed | Disallowed |
| %TypedArray%.prototype.lastIndexOf | Disallowed | Disallowed |
| %TypedArray%.prototype.slice | Disallowed | Disallowed |
| %TypedArray%.prototype.every | Disallowed | Disallowed |
| %TypedArray%.prototype.filter | Disallowed | Disallowed |
| %TypedArray%.prototype.forEach | Disallowed | Disallowed |
| %TypedArray%.prototype.map | Disallowed | Disallowed |
| %TypedArray%.prototype.reduce | Disallowed | Disallowed |
| %TypedArray%.prototype.reduceRight | Disallowed | Disallowed |
| %TypedArray%.prototype.reverse | Disallowed | Disallowed |
| %TypedArray%.prototype.some | Disallowed | Disallowed |
| %TypedArray%.prototype.sort | Disallowed | Disallowed |
| %TypedArray%.prototype.copyWithin | Disallowed | Disallowed |
| %TypedArray%.prototype.find | Disallowed | Disallowed |
| %TypedArray%.prototype.findIndex | Disallowed | Disallowed |
| %TypedArray%.prototype.fill | Disallowed | Disallowed |
| %TypedArray%.prototype.keys | Disallowed | Disallowed |
| %TypedArray%.prototype.values | Disallowed | Disallowed |
| %TypedArray%.prototype.entries | Disallowed | Disallowed |
| %TypedArray%.prototype[Symbol.iterator] | Disallowed | Disallowed |
| %TypedArray%[Symbol.species] | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic functionality | Supported | Not Supported |
| constructor arguments | Supported | Not Supported |
| constructor requires new | Supported | Not Supported |
| constructor accepts null | Supported | Not Supported |
| constructor invokes set | Supported | Not Supported |
| iterator closing | Supported | Not Supported |
| Map.prototype.set returns this | Supported | Not Supported |
| -0 key converts to +0 | Supported | Not Supported |
| Map.prototype.size | Supported | Not Supported |
| Map.prototype.delete | Supported | Not Supported |
| Map.prototype.clear | Supported | Not Supported |
| Map.prototype.forEach | Supported | Not Supported |
| Map.prototype.keys | Supported | Not Supported |
| Map.prototype.values | Supported | Not Supported |
| Map.prototype.entries | Supported | Not Supported |
| Map.prototype[Symbol.iterator] | Supported | Not Supported |
| Map.prototype isn't an instance | Supported | Not Supported |
| Map iterator prototype chain | Supported | Not Supported |
| Map[Symbol.species] | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic functionality | Supported | Not Supported |
| constructor arguments | Supported | Not Supported |
| constructor requires new | Supported | Not Supported |
| constructor accepts null | Supported | Not Supported |
| constructor invokes add | Supported | Not Supported |
| iterator closing | Supported | Not Supported |
| Set.prototype.add returns this | Supported | Not Supported |
| -0 key converts to +0 | Supported | Not Supported |
| Set.prototype.size | Supported | Not Supported |
| Set.prototype.delete | Supported | Not Supported |
| Set.prototype.clear | Supported | Not Supported |
| Set.prototype.forEach | Supported | Not Supported |
| Set.prototype.keys | Supported | Not Supported |
| Set.prototype.values | Supported | Not Supported |
| Set.prototype.entries | Supported | Not Supported |
| Set.prototype[Symbol.iterator] | Supported | Not Supported |
| Set.prototype isn't an instance | Supported | Not Supported |
| Set iterator prototype chain | Supported | Not Supported |
| Set[Symbol.species] | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic functionality | Disallowed | Disallowed |
| constructor arguments | Disallowed | Disallowed |
| constructor requires new | Disallowed | Disallowed |
| constructor accepts null | Disallowed | Disallowed |
| constructor invokes set | Disallowed | Disallowed |
| frozen objects as keys | Disallowed | Disallowed |
| iterator closing | Disallowed | Disallowed |
| WeakMap.prototype.set returns this | Disallowed | Disallowed |
| WeakMap.prototype.delete | Disallowed | Disallowed |
| no WeakMap.prototype.clear method | Disallowed | Disallowed |
| .has, .get and .delete methods accept primitives | Disallowed | Disallowed |
| WeakMap.prototype isn't an instance | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic functionality | Disallowed | Disallowed |
| constructor arguments | Disallowed | Disallowed |
| constructor requires new | Disallowed | Disallowed |
| constructor accepts null | Disallowed | Disallowed |
| constructor invokes add | Disallowed | Disallowed |
| iterator closing | Disallowed | Disallowed |
| WeakSet.prototype.add returns this | Disallowed | Disallowed |
| WeakSet.prototype.delete | Disallowed | Disallowed |
| no WeakSet.prototype.clear method | Disallowed | Disallowed |
| .has and .delete methods accept primitives | Disallowed | Disallowed |
| WeakSet.prototype isn't an instance | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| constructor requires new | Disallowed | Disallowed |
| no "prototype" property | Disallowed | Disallowed |
| "get" handler | Disallowed | Disallowed |
| "get" handler, instances of proxies | Disallowed | Disallowed |
| "get" handler invariants | Disallowed | Disallowed |
| "set" handler | Disallowed | Disallowed |
| "set" handler, instances of proxies | Disallowed | Disallowed |
| "set" handler invariants | Disallowed | Disallowed |
| "has" handler | Disallowed | Disallowed |
| "has" handler, instances of proxies | Disallowed | Disallowed |
| "has" handler invariants | Disallowed | Disallowed |
| "deleteProperty" handler | Disallowed | Disallowed |
| "deleteProperty" handler invariant | Disallowed | Disallowed |
| "getOwnPropertyDescriptor" handler | Disallowed | Disallowed |
| "getOwnPropertyDescriptor" handler invariants | Disallowed | Disallowed |
| "defineProperty" handler | Disallowed | Disallowed |
| "defineProperty" handler invariants | Disallowed | Disallowed |
| "getPrototypeOf" handler | Disallowed | Disallowed |
| "getPrototypeOf" handler invariant | Disallowed | Disallowed |
| "setPrototypeOf" handler | Disallowed | Disallowed |
| "setPrototypeOf" handler invariant | Disallowed | Disallowed |
| "isExtensible" handler | Disallowed | Disallowed |
| "isExtensible" handler invariant | Disallowed | Disallowed |
| "preventExtensions" handler | Disallowed | Disallowed |
| "preventExtensions" handler invariant | Disallowed | Disallowed |
| "ownKeys" handler | Disallowed | Disallowed |
| "ownKeys" handler invariant | Disallowed | Disallowed |
| "apply" handler | Disallowed | Disallowed |
| "apply" handler invariant | Disallowed | Disallowed |
| "construct" handler | Disallowed | Disallowed |
| "construct" handler invariants | Disallowed | Disallowed |
| Proxy.revocable | Disallowed | Disallowed |
| Array.isArray support | Disallowed | Disallowed |
| JSON.stringify support | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Reflect.get | Disallowed | Disallowed |
| Reflect.set | Disallowed | Disallowed |
| Reflect.has | Disallowed | Disallowed |
| Reflect.deleteProperty | Disallowed | Disallowed |
| Reflect.getOwnPropertyDescriptor | Disallowed | Disallowed |
| Reflect.defineProperty | Disallowed | Disallowed |
| Reflect.getPrototypeOf | Disallowed | Disallowed |
| Reflect.setPrototypeOf | Disallowed | Disallowed |
| Reflect.isExtensible | Disallowed | Disallowed |
| Reflect.preventExtensions | Disallowed | Disallowed |
| Reflect.ownKeys, string keys | Disallowed | Disallowed |
| Reflect.ownKeys, symbol keys | Disallowed | Disallowed |
| Reflect.apply | Disallowed | Disallowed |
| Reflect.construct | Disallowed | Disallowed |
| Reflect.construct sets new.target meta-property | Disallowed | Disallowed |
| Reflect.construct creates instances from third argument | Disallowed | Disallowed |
| Reflect.construct, Array subclassing | Disallowed | Disallowed |
| Reflect.construct, RegExp subclassing | Disallowed | Disallowed |
| Reflect.construct, Function subclassing | Disallowed | Disallowed |
| Reflect.construct, Promise subclassing | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic functionality | Disallowed | Disallowed |
| constructor requires new | Disallowed | Disallowed |
| Promise.prototype isn't an instance | Disallowed | Disallowed |
| Promise.all | Disallowed | Disallowed |
| Promise.all, generic iterables | Disallowed | Disallowed |
| Promise.race | Disallowed | Disallowed |
| Promise.race, generic iterables | Disallowed | Disallowed |
| Promise[Symbol.species] | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic functionality | Supported | Not Supported |
| typeof support | Supported | Not Supported |
| symbol keys are hidden to pre-ES6 code | Supported | Not Supported |
| Object.defineProperty support | Supported | Not Supported |
| symbols inherit from Symbol.prototype | Supported | Not Supported |
| cannot coerce to string or number | Not Supported | Not Supported |
| can convert with String() | Not Supported | Not Supported |
| new Symbol() throws | Supported | Not Supported |
| Object(symbol) | Not Supported | Not Supported |
| JSON.stringify ignores symbol primitives | Supported | Not Supported |
| JSON.stringify ignores symbol objects | Not Supported | Not Supported |
| global symbol registry | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Symbol.hasInstance | Disallowed | Disallowed |
| Symbol.isConcatSpreadable | Disallowed | Disallowed |
| Symbol.iterator, existence | Disallowed | Disallowed |
| Symbol.iterator, arguments object | Disallowed | Disallowed |
| Symbol.species, existence | Disallowed | Disallowed |
| Symbol.species, Array.prototype.concat | Disallowed | Disallowed |
| Symbol.species, Array.prototype.filter | Disallowed | Disallowed |
| Symbol.species, Array.prototype.map | Disallowed | Disallowed |
| Symbol.species, Array.prototype.slice | Disallowed | Disallowed |
| Symbol.species, Array.prototype.splice | Disallowed | Disallowed |
| Symbol.species, RegExp.prototype[Symbol.split] | Disallowed | Disallowed |
| Symbol.species, Promise.prototype.then | Disallowed | Disallowed |
| Symbol.replace | Disallowed | Disallowed |
| Symbol.search | Disallowed | Disallowed |
| Symbol.split | Disallowed | Disallowed |
| Symbol.match | Disallowed | Disallowed |
| Symbol.match, RegExp constructor | Disallowed | Disallowed |
| Symbol.match, String.prototype.startsWith | Disallowed | Disallowed |
| Symbol.match, String.prototype.endsWith | Disallowed | Disallowed |
| Symbol.match, String.prototype.includes | Disallowed | Disallowed |
| Symbol.toPrimitive | Disallowed | Disallowed |
| Symbol.toStringTag | Disallowed | Disallowed |
| Symbol.toStringTag affects existing built-ins | Disallowed | Disallowed |
| Symbol.toStringTag, new built-ins | Disallowed | Disallowed |
| Symbol.toStringTag, misc. built-ins | Disallowed | Disallowed |
| Symbol.unscopables | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Object.assign | Supported | Not Supported |
| Object.is | Supported | Not Supported |
| Object.getOwnPropertySymbols | Supported | Not Supported |
| Object.setPrototypeOf | Not Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| function statements | Supported | Supported |
| function expressions | Supported | Supported |
| new Function | Not Supported | Not Supported |
| bound functions | Not Supported | Not Supported |
| variables (function) | Supported | Not Supported |
| object methods (function) | Supported | Not Supported |
| accessor properties | Not Supported | Not Supported |
| shorthand methods | Supported | Not Supported |
| shorthand methods (no lexical binding) | Supported | Not Supported |
| symbol-keyed methods | Not Supported | Not Supported |
| class statements | Supported | Not Supported |
| class expressions | Supported | Not Supported |
| variables (class) | Supported | Not Supported |
| object methods (class) | Not Supported | Not Supported |
| class prototype methods | Supported | Not Supported |
| class static methods | Supported | Not Supported |
| isn't writable, is configurable | Not Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| String.raw | Supported | Not Supported |
| String.fromCodePoint | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| String.prototype.codePointAt | Supported | Supported |
| String.prototype.normalize | Supported | Supported |
| String.prototype.repeat | Supported | Supported |
| String.prototype.startsWith | Supported | Supported |
| String.prototype.startsWith throws on RegExp | Not Supported | Not Supported |
| String.prototype.endsWith | Supported | Supported |
| String.prototype.endsWith throws on RegExp | Not Supported | Not Supported |
| String.prototype.includes | Supported | Supported |
| String.prototype[Symbol.iterator] | Supported | Not Supported |
| String iterator prototype chain | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| RegExp.prototype.flags | Supported | Not Supported |
| RegExp.prototype[Symbol.match] | Not Supported | Not Supported |
| RegExp.prototype[Symbol.replace] | Supported | Not Supported |
| RegExp.prototype[Symbol.split] | Supported | Not Supported |
| RegExp.prototype[Symbol.search] | Not Supported | Not Supported |
| RegExp[Symbol.species] | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Array.from, array-like objects | Supported | Not Supported |
| Array.from, generator instances | Disallowed | Disallowed |
| Array.from, generic iterables | Supported | Not Supported |
| Array.from, instances of generic iterables | Supported | Not Supported |
| Array.from map function, array-like objects | Supported | Not Supported |
| Array.from map function, generator instances | Disallowed | Disallowed |
| Array.from map function, generic iterables | Supported | Not Supported |
| Array.from map function, instances of iterables | Supported | Not Supported |
| Array.from, iterator closing | Supported | Not Supported |
| Array.of | Supported | Not Supported |
| Array[Symbol.species] | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Array.prototype.copyWithin | Supported | Not Supported |
| Array.prototype.find | Supported | Not Supported |
| Array.prototype.findIndex | Supported | Not Supported |
| Array.prototype.fill | Supported | Not Supported |
| Array.prototype.keys | Supported | Not Supported |
| Array.prototype.values | Supported | Not Supported |
| Array.prototype.entries | Supported | Not Supported |
| Array.prototype[Symbol.iterator] | Supported | Not Supported |
| Array iterator prototype chain | Supported | Not Supported |
| Array.prototype[Symbol.unscopables] | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Number.isFinite | Supported | Not Supported |
| Number.isInteger | Supported | Not Supported |
| Number.isSafeInteger | Supported | Not Supported |
| Number.isNaN | Supported | Not Supported |
| Number.parseFloat | Disallowed | Disallowed |
| Number.parseInt | Disallowed | Disallowed |
| Number.EPSILON | Supported | Not Supported |
| Number.MIN_SAFE_INTEGER | Supported | Not Supported |
| Number.MAX_SAFE_INTEGER | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Math.clz32 | Supported | Not Supported |
| Math.imul | Supported | Not Supported |
| Math.sign | Supported | Not Supported |
| Math.log10 | Supported | Not Supported |
| Math.log2 | Supported | Not Supported |
| Math.log1p | Supported | Not Supported |
| Math.expm1 | Supported | Not Supported |
| Math.cosh | Supported | Not Supported |
| Math.sinh | Supported | Not Supported |
| Math.tanh | Supported | Not Supported |
| Math.acosh | Supported | Not Supported |
| Math.asinh | Supported | Not Supported |
| Math.atanh | Supported | Not Supported |
| Math.trunc | Supported | Not Supported |
| Math.fround | Supported | Not Supported |
| Math.cbrt | Supported | Not Supported |
| Math.hypot | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Date.prototype[Symbol.toPrimitive] | Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| length property (accessing) | Disallowed | Disallowed |
| length property (setting) | Disallowed | Disallowed |
| correct prototype chain | Disallowed | Disallowed |
| Array.isArray support | Disallowed | Disallowed |
| Array.prototype.concat | Disallowed | Disallowed |
| Array.prototype.filter | Disallowed | Disallowed |
| Array.prototype.map | Disallowed | Disallowed |
| Array.prototype.slice | Disallowed | Disallowed |
| Array.prototype.splice | Disallowed | Disallowed |
| Array.from | Disallowed | Disallowed |
| Array.of | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic functionality | Disallowed | Disallowed |
| correct prototype chain | Disallowed | Disallowed |
| RegExp.prototype.exec | Disallowed | Disallowed |
| RegExp.prototype.test | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| can be called | Disallowed | Disallowed |
| correct prototype chain | Disallowed | Disallowed |
| can be used with "new" | Disallowed | Disallowed |
| Function.prototype.call | Disallowed | Disallowed |
| Function.prototype.apply | Disallowed | Disallowed |
| Function.prototype.bind | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic functionality | Disallowed | Disallowed |
| correct prototype chain | Disallowed | Disallowed |
| Promise.all | Disallowed | Disallowed |
| Promise.race | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Boolean is subclassable | Disallowed | Disallowed |
| Number is subclassable | Disallowed | Disallowed |
| String is subclassable | Disallowed | Disallowed |
| Error is subclassable | Disallowed | Disallowed |
| Map is subclassable | Disallowed | Disallowed |
| Set is subclassable | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic functions | Disallowed | Disallowed |
| generator functions | Disallowed | Disallowed |
| arrow functions | Disallowed | Disallowed |
| classes | Disallowed | Disallowed |
| subclasses | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| ToPrimitive | Disallowed | Disallowed |
| CreateListFromArrayLike | Disallowed | Disallowed |
| instanceof operator | Supported | Disallowed |
| HasBinding | Disallowed | Disallowed |
| CreateDynamicFunction | Disallowed | Disallowed |
| ClassDefinitionEvaluation | Disallowed | Disallowed |
| IteratorComplete, IteratorValue | Disallowed | Disallowed |
| ToPropertyDescriptor | Disallowed | Disallowed |
| Object.assign | Disallowed | Disallowed |
| Object.defineProperties | Disallowed | Disallowed |
| Function.prototype.bind | Disallowed | Disallowed |
| Error.prototype.toString | Disallowed | Disallowed |
| String.raw | Disallowed | Disallowed |
| RegExp constructor | Disallowed | Disallowed |
| RegExp.prototype.flags | Disallowed | Disallowed |
| RegExp.prototype.test | Disallowed | Disallowed |
| RegExp.prototype.toString | Disallowed | Disallowed |
| RegExp.prototype[Symbol.match] | Disallowed | Disallowed |
| RegExp.prototype[Symbol.replace] | Disallowed | Disallowed |
| RegExp.prototype[Symbol.search] | Disallowed | Disallowed |
| RegExp.prototype[Symbol.split] | Disallowed | Disallowed |
| Array.from | Disallowed | Disallowed |
| Array.prototype.concat | Disallowed | Disallowed |
| Array.prototype iteration methods | Disallowed | Disallowed |
| Array.prototype.pop | Disallowed | Disallowed |
| Array.prototype.reverse | Disallowed | Disallowed |
| Array.prototype.shift | Disallowed | Disallowed |
| Array.prototype.splice | Disallowed | Disallowed |
| Array.prototype.toString | Disallowed | Disallowed |
| JSON.stringify | Disallowed | Disallowed |
| Promise resolve functions | Disallowed | Disallowed |
| String.prototype.match | Disallowed | Disallowed |
| String.prototype.replace | Disallowed | Disallowed |
| String.prototype.search | Disallowed | Disallowed |
| String.prototype.split | Disallowed | Disallowed |
| Date.prototype.toJSON | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Object.assign | Disallowed | Disallowed |
| Array.from | Disallowed | Disallowed |
| Array.of | Disallowed | Disallowed |
| Array.prototype.copyWithin | Disallowed | Disallowed |
| Array.prototype.fill | Disallowed | Disallowed |
| Array.prototype.pop | Disallowed | Disallowed |
| Array.prototype.push | Disallowed | Disallowed |
| Array.prototype.reverse | Disallowed | Disallowed |
| Array.prototype.shift | Disallowed | Disallowed |
| Array.prototype.splice | Disallowed | Disallowed |
| Array.prototype.unshift | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| [[Set]] | Disallowed | Disallowed |
| SetIntegrityLevel | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Array.prototype.copyWithin | Disallowed | Disallowed |
| Array.prototype.pop | Disallowed | Disallowed |
| Array.prototype.reverse | Disallowed | Disallowed |
| Array.prototype.shift | Disallowed | Disallowed |
| Array.prototype.splice | Disallowed | Disallowed |
| Array.prototype.unshift | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| [[Set]] | Disallowed | Disallowed |
| Object.assign | Disallowed | Disallowed |
| Object.prototype.hasOwnProperty | Disallowed | Disallowed |
| Function.prototype.bind | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| SetIntegrityLevel | Disallowed | Disallowed |
| TestIntegrityLevel | Disallowed | Disallowed |
| SerializeJSONObject | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Object.getPrototypeOf | Disallowed | Disallowed |
| Object.getOwnPropertyDescriptor | Disallowed | Disallowed |
| Object.getOwnPropertyNames | Disallowed | Disallowed |
| Object.seal | Disallowed | Disallowed |
| Object.freeze | Disallowed | Disallowed |
| Object.preventExtensions | Disallowed | Disallowed |
| Object.isSealed | Disallowed | Disallowed |
| Object.isFrozen | Disallowed | Disallowed |
| Object.isExtensible | Disallowed | Disallowed |
| Object.keys | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Object.keys | Disallowed | Disallowed |
| Object.getOwnPropertyNames | Disallowed | Disallowed |
| Object.assign | Disallowed | Disallowed |
| JSON.stringify | Disallowed | Disallowed |
| JSON.parse | Disallowed | Disallowed |
| Reflect.ownKeys, string key order | Disallowed | Disallowed |
| Reflect.ownKeys, symbol key order | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| var ⸯ; | Disallowed | Disallowed |
| var ð ‹€; | Disallowed | Disallowed |
| no escaped reserved words as identifiers | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| hoisted block-level function declaration | Disallowed | Disallowed |
| labeled function statements | Disallowed | Disallowed |
| function statements in if-statement clauses | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic support | Disallowed | Disallowed |
| multiple __proto__ is an error | Disallowed | Disallowed |
| not a computed property | Disallowed | Disallowed |
| not a shorthand property | Disallowed | Disallowed |
| not a shorthand method | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| get prototype | Disallowed | Disallowed |
| set prototype | Disallowed | Disallowed |
| absent from Object.create(null) | Disallowed | Disallowed |
| present in hasOwnProperty() | Disallowed | Disallowed |
| correct property descriptor | Disallowed | Disallowed |
| present in Object.getOwnPropertyNames() | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| existence | Disallowed | Disallowed |
| tags' names are lowercase | Disallowed | Disallowed |
| quotes in arguments are escaped | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| basic functionality | Disallowed | Disallowed |
| returns this | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| hyphens in character sets | Disallowed | Disallowed |
| invalid character escapes | Disallowed | Disallowed |
| invalid control-character escapes | Disallowed | Disallowed |
| invalid Unicode escapes | Disallowed | Disallowed |
| invalid hexadecimal escapes | Disallowed | Disallowed |
| incomplete patterns and quantifiers | Disallowed | Disallowed |
| octal escape sequences | Disallowed | Disallowed |
| invalid backreferences become octal escapes | Disallowed | Disallowed |
ECMAScript 2009 (ES5) features
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Getter accessors | Supported | Supported |
| Setter accessors | Supported | Supported |
| Trailing commas in object literals | Supported | Supported |
| Trailing commas in array literals | Supported | Supported |
| Reserved words as property names | Supported | Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Object.create | Supported | Supported |
| Object.defineProperty | Supported | Supported |
| Object.defineProperties | Supported | Supported |
| Object.getPrototypeOf | Supported | Supported |
| Object.keys | Supported | Supported |
| Object.seal | Supported | Supported |
| Object.freeze | Supported | Supported |
| Object.preventExtensions | Supported | Supported |
| Object.isSealed | Supported | Supported |
| Object.isFrozen | Supported | Supported |
| Object.isExtensible | Supported | Supported |
| Object.getOwnPropertyDescriptor | Supported | Supported |
| Object.getOwnPropertyNames | Supported | Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Array.isArray | Supported | Supported |
| Array.prototype.indexOf | Supported | Supported |
| Array.prototype.lastIndexOf | Supported | Supported |
| Array.prototype.every | Supported | Supported |
| Array.prototype.some | Supported | Supported |
| Array.prototype.forEach | Supported | Supported |
| Array.prototype.map | Supported | Supported |
| Array.prototype.filter | Supported | Supported |
| Array.prototype.reduce | Supported | Supported |
| Array.prototype.reduceRight | Supported | Supported |
| Array.prototype.sort: compareFn must be function or undefined | Not Supported | Not Supported |
| Array.prototype.sort: compareFn may be explicit undefined | Supported | Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Property access on strings | Supported | Supported |
| String.prototype.split | Supported | Not Supported |
| String.prototype.trim | Supported | Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Date.prototype.toISOString | Supported | Supported |
| Date.now | Supported | Supported |
| Date.prototype.toJSON | Not Supported | Not Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| undefined | Supported | Supported |
| NaN | Supported | Supported |
| Infinity | Supported | Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Number.prototype.toExponential rounds properly | Supported | Supported |
| Number.prototype.toExponential throws on ±Infinity fractionDigits | Supported | Supported |
| Number.prototype.toExponential does not throw on edge cases | Supported | Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| reserved words | Disallowed | Disallowed |
| "this" is undefined in functions | Disallowed | Disallowed |
| "this" is not coerced to object in primitive methods | Disallowed | Disallowed |
| "this" is not coerced to object in primitive accessors | Disallowed | Disallowed |
| legacy octal is a SyntaxError | Disallowed | Disallowed |
| assignment to unresolvable identifiers is a ReferenceError | Disallowed | Disallowed |
| assignment to eval or arguments is a SyntaxError | Disallowed | Disallowed |
| assignment to non-writable properties is a TypeError | Disallowed | Disallowed |
| eval or arguments bindings is a SyntaxError | Disallowed | Disallowed |
| arguments.caller removed or is a TypeError | Disallowed | Disallowed |
| arguments.callee is a TypeError | Disallowed | Disallowed |
| (function(){}).caller and (function(){}).arguments is a TypeError | Disallowed | Disallowed |
| arguments is unmapped | Disallowed | Disallowed |
| eval() can't create bindings | Disallowed | Disallowed |
| deleting bindings is a SyntaxError | Disallowed | Disallowed |
| deleting non-configurable properties is a TypeError | Disallowed | Disallowed |
| "with" is a SyntaxError | Disallowed | Disallowed |
| repeated parameter names is a SyntaxError | Disallowed | Disallowed |
| function expressions with matching name and argument are valid | Disallowed | Disallowed |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| Function.prototype.bind | Supported | Supported |
| Feature | ECMAScript 2021 (ES12) mode | ES5 Standards mode |
|---|---|---|
| JSON | Supported | Supported |