| Spec | 0.72 legacy hermes-2024-04-29 58.5% | 0.83 v1 v250829098.0.4 69.9% | 0.87 v1 v250829098.0.13 69.9% | static hermes-8a30722a 73.6% |
|---|---|---|---|---|
| es2016plus | 48.0% | 63.3% | 63.3% | 76.2% |
| 2016 features | ||||
| ▸Array.prototype.includes | 4/4 | 4/4 | 4/4 | 4/4 |
| ▸exponentiation (**) operator | 3/3 | 3/3 | 3/3 | 3/3 |
| 2016 misc | ||||
| generator functions can't be used with "new" | yes | yes | yes | yes |
| generator throw() caught by inner generator | yes | yes | yes | yes |
| nested rest destructuring, declarations | yes | yes | yes | yes |
| nested rest destructuring, parameters | yes | yes | yes | yes |
| Proxy internal calls, Array.prototype.includes | yes | yes | yes | yes |
| Proxy, "enumerate" handler removed | yes | yes | yes | yes |
| strict fn w/ non-strict non-simple params is error | yes | yes | yes | yes |
| 2017 annex b | ||||
| assignments allowed in for-in head in non-strict mode | yes | yes | yes | yes |
| ▸Object.prototype getter/setter methods | 16/16 | 16/16 | 16/16 | 16/16 |
| ▸Proxy internal calls, getter/setter methods | 4/4 | 4/4 | 4/4 | 4/4 |
| 2017 features | ||||
| ▸async functions | 5/16 | 6/16 | 6/16 | 6/16 |
| ▸Object static methods | 4/4 | 4/4 | 4/4 | 4/4 |
| ▸shared memory and atomics | 0/17 | 0/17 | 0/17 | 0/17 |
| ▸String padding | 2/2 | 2/2 | 2/2 | 2/2 |
| ▸trailing commas in function syntax | 2/2 | 2/2 | 2/2 | 2/2 |
| 2017 misc | ||||
| arguments.caller removed | no | no | no | no |
| RegExp "u" flag, case folding | no | no | no | yes |
| 2018 features | ||||
| ▸Asynchronous Iterators | 0/2 | 0/2 | 0/2 | 0/2 |
| ▸object rest/spread properties | 2/2 | 2/2 | 2/2 | 2/2 |
| ▸Promise.prototype.finally | 0/3 | 0/3 | 0/3 | 0/3 |
| RegExp Lookbehind Assertions | yes | yes | yes | yes |
| RegExp named capture groups | yes | yes | yes | yes |
| ▸RegExp Unicode Property Escapes | 0/10 | 8/10 | 8/10 | 10/10 |
| s (dotAll) flag for regular expressions | yes | yes | yes | yes |
| 2018 misc | ||||
| Proxy "ownKeys" handler, duplicate keys for non-extensible targets | yes | yes | yes | yes |
| template literal revision | yes | yes | yes | yes |
| 2019 features | ||||
| ▸Array.prototype.{flat, flatMap} | 2/3 | 2/3 | 2/3 | 2/3 |
| Object.fromEntries | yes | yes | yes | yes |
| ▸string trimming | 4/4 | 4/4 | 4/4 | 4/4 |
| ▸Symbol.prototype.description | 2/3 | 2/3 | 2/3 | 3/3 |
| 2019 misc | ||||
| ▸Function.prototype.toString revision | 1/7 | 1/7 | 1/7 | 1/7 |
| ▸JSON superset | 2/2 | 2/2 | 2/2 | 2/2 |
| ▸optional catch binding | 2/3 | 2/3 | 2/3 | 2/3 |
| Well-formed JSON.stringify | yes | yes | yes | yes |
| 2020 features | ||||
| ▸BigInt | 8/8 | 8/8 | 8/8 | 8/8 |
| ▸globalThis | 2/2 | 2/2 | 2/2 | 2/2 |
| nullish coalescing operator (??) | yes | yes | yes | yes |
| ▸optional chaining operator (?.) | 5/5 | 5/5 | 5/5 | 5/5 |
| Promise.allSettled | no | no | no | no |
| ▸String.prototype.matchAll | 2/2 | 2/2 | 2/2 | 2/2 |
| 2021 features | ||||
| ▸Logical Assignment | 9/9 | 9/9 | 9/9 | 9/9 |
| numeric separators | yes | yes | yes | yes |
| ▸Promise.any | 0/2 | 0/2 | 0/2 | 0/2 |
| String.prototype.replaceAll | yes | yes | yes | yes |
| ▸WeakReferences | 0/2 | 1/2 | 1/2 | 2/2 |
| 2022 features | ||||
| ▸.at() method on the built-in indexables | 3/3 | 3/3 | 3/3 | 3/3 |
| Class static initialization blocks | no | yes | yes | yes |
| Ergonomic brand checks for private fields | no | yes | yes | yes |
| ▸Error.cause property | 16/16 | 16/16 | 16/16 | 16/16 |
| ▸instance class fields | 0/7 | 7/7 | 7/7 | 7/7 |
| ▸Object.hasOwn | 2/2 | 2/2 | 2/2 | 2/2 |
| ▸private class methods | 0/4 | 4/4 | 4/4 | 4/4 |
| ▸RegExp Match Indices (`hasIndices` / `d` flag) | 0/2 | 2/2 | 2/2 | 2/2 |
| ▸static class fields | 0/4 | 4/4 | 4/4 | 4/4 |
| 2023 features | ||||
| ▸Array find from last | 2/2 | 2/2 | 2/2 | 2/2 |
| ▸Change Array by copy | 0/7 | 3/7 | 3/7 | 3/7 |
| Hashbang Grammar | yes | yes | yes | yes |
| 2024 features | ||||
| ▸Array Grouping | 0/2 | 0/2 | 0/2 | 2/2 |
| ▸ArrayBuffer.prototype.transfer | 0/3 | 0/3 | 0/3 | 0/3 |
| Promise.withResolvers | no | no | no | yes |
| ▸RegExp `v` flag | 0/7 | 0/7 | 0/7 | 0/7 |
| 2025 features | ||||
| Duplicate named capturing groups | no | no | no | no |
| ▸Iterator Helpers | 0/16 | 0/16 | 0/16 | 16/16 |
| Promise.try | no | no | no | no |
| RegExp Escaping | no | no | no | no |
| ▸RegExp Pattern Modifiers | 0/3 | 0/3 | 0/3 | 3/3 |
| ▸Set methods | 0/7 | 7/7 | 7/7 | 7/7 |
| ▸Uint8Array to/from base64 and hex | 0/6 | 0/6 | 0/6 | 6/6 |
| es5 | 87.7% | 95.9% | 95.9% | 95.9% |
| ▸Array methods | 13/13 | 13/13 | 13/13 | 13/13 |
| ▸Date methods | 3/3 | 3/3 | 3/3 | 3/3 |
| Function.prototype.bind | yes | yes | yes | yes |
| ▸Immutable globals | 3/3 | 3/3 | 3/3 | 3/3 |
| JSON | yes | yes | yes | yes |
| ▸Miscellaneous | 7/8 | 7/8 | 7/8 | 7/8 |
| ▸Number methods | 3/3 | 3/3 | 3/3 | 3/3 |
| ▸Object static methods | 13/13 | 13/13 | 13/13 | 13/13 |
| ▸Object/array literal extensions | 5/5 | 5/5 | 5/5 | 5/5 |
| ▸Strict mode | 11/19 | 17/19 | 17/19 | 17/19 |
| ▸String properties and methods | 4/4 | 4/4 | 4/4 | 4/4 |
| es6 | 72.6% | 85.7% | 85.7% | 86.1% |
| annex b | ||||
| ▸__proto__ in object literals | 5/5 | 5/5 | 5/5 | 5/5 |
| HTML-style comments | no | no | no | no |
| ▸non-strict function semantics | 0/3 | 2/3 | 2/3 | 2/3 |
| ▸Object.prototype.__proto__ | 6/6 | 6/6 | 6/6 | 6/6 |
| ▸RegExp syntax extensions | 7/8 | 7/8 | 7/8 | 7/8 |
| ▸RegExp.prototype.compile | 0/2 | 0/2 | 0/2 | 0/2 |
| ▸String.prototype HTML methods | 0/3 | 0/3 | 0/3 | 0/3 |
| bindings | ||||
| block-level function declaration | no | yes | yes | yes |
| ▸const | 6/18 | 12/18 | 12/18 | 12/18 |
| ▸let | 8/16 | 12/16 | 12/16 | 12/16 |
| built-in extensions | ||||
| ▸Array static methods | 5/11 | 5/11 | 5/11 | 5/11 |
| ▸Array.prototype methods | 10/11 | 10/11 | 10/11 | 10/11 |
| Date.prototype[Symbol.toPrimitive] | yes | yes | yes | yes |
| ▸function "name" property | 10/17 | 16/17 | 16/17 | 17/17 |
| ▸Math methods | 17/17 | 17/17 | 17/17 | 17/17 |
| ▸Number properties | 9/9 | 9/9 | 9/9 | 9/9 |
| ▸Object static methods | 4/4 | 4/4 | 4/4 | 4/4 |
| ▸RegExp.prototype properties | 5/6 | 5/6 | 5/6 | 5/6 |
| ▸String static methods | 2/2 | 2/2 | 2/2 | 2/2 |
| ▸String.prototype methods | 10/10 | 10/10 | 10/10 | 10/10 |
| built-ins | ||||
| ▸Map | 17/19 | 17/19 | 17/19 | 17/19 |
| ▸Promise | 1/8 | 1/8 | 1/8 | 2/8 |
| ▸Proxy | 34/34 | 34/34 | 34/34 | 34/34 |
| ▸Reflect | 18/20 | 19/20 | 19/20 | 19/20 |
| ▸Set | 17/19 | 17/19 | 17/19 | 17/19 |
| ▸Symbol | 12/12 | 12/12 | 12/12 | 12/12 |
| ▸typed arrays | 43/46 | 43/46 | 43/46 | 43/46 |
| ▸WeakMap | 11/12 | 11/12 | 11/12 | 11/12 |
| ▸WeakSet | 10/11 | 10/11 | 10/11 | 10/11 |
| ▸well-known symbols | 16/27 | 17/27 | 17/27 | 18/27 |
| functions | ||||
| ▸arrow functions | 11/13 | 13/13 | 13/13 | 13/13 |
| ▸class | 0/24 | 23/24 | 23/24 | 23/24 |
| ▸generators | 20/27 | 23/27 | 23/27 | 23/27 |
| ▸super | 0/8 | 8/8 | 8/8 | 8/8 |
| misc | ||||
| ▸miscellaneous | 7/9 | 8/9 | 8/9 | 8/9 |
| ▸Object static methods accept primitives | 10/10 | 10/10 | 10/10 | 10/10 |
| ▸own property order | 7/7 | 7/7 | 7/7 | 7/7 |
| ▸prototype of bound functions | 0/5 | 5/5 | 5/5 | 5/5 |
| ▸Proxy, internal 'defineProperty' calls | 0/2 | 1/2 | 1/2 | 1/2 |
| ▸Proxy, internal 'deleteProperty' calls | 6/6 | 6/6 | 6/6 | 6/6 |
| ▸Proxy, internal 'get' calls | 29/36 | 29/36 | 29/36 | 29/36 |
| ▸Proxy, internal 'getOwnPropertyDescriptor' calls | 3/4 | 4/4 | 4/4 | 4/4 |
| ▸Proxy, internal 'ownKeys' calls | 1/3 | 1/3 | 1/3 | 1/3 |
| ▸Proxy, internal 'set' calls | 11/11 | 11/11 | 11/11 | 11/11 |
| ▸Updated identifier syntax | 1/3 | 3/3 | 3/3 | 3/3 |
| optimisation | ||||
| ▸proper tail calls (tail call optimisation) | 0/2 | 0/2 | 0/2 | 0/2 |
| subclassing | ||||
| ▸Array is subclassable | 0/11 | 6/11 | 6/11 | 6/11 |
| ▸Function is subclassable | 0/6 | 6/6 | 6/6 | 6/6 |
| ▸miscellaneous subclassables | 0/6 | 6/6 | 6/6 | 6/6 |
| ▸Promise is subclassable | 0/4 | 1/4 | 1/4 | 1/4 |
| ▸RegExp is subclassable | 0/4 | 4/4 | 4/4 | 4/4 |
| syntax | ||||
| ▸default function parameters | 6/7 | 6/7 | 6/7 | 6/7 |
| ▸destructuring, assignment | 22/25 | 22/25 | 22/25 | 22/25 |
| ▸destructuring, declarations | 18/23 | 19/23 | 19/23 | 19/23 |
| ▸destructuring, parameters | 23/26 | 23/26 | 23/26 | 23/26 |
| ▸for..of loops | 5/9 | 5/9 | 5/9 | 5/9 |
| ▸new.target | 2/2 | 2/2 | 2/2 | 2/2 |
| ▸object literal extensions | 6/6 | 6/6 | 6/6 | 6/6 |
| ▸octal and binary literals | 4/4 | 4/4 | 4/4 | 4/4 |
| ▸RegExp "y" and "u" flags | 6/6 | 6/6 | 6/6 | 6/6 |
| ▸rest parameters | 4/5 | 5/5 | 5/5 | 5/5 |
| ▸spread syntax for iterable objects | 11/15 | 11/15 | 11/15 | 11/15 |
| ▸template literals | 7/8 | 7/8 | 7/8 | 7/8 |
| ▸Unicode code point escapes | 4/4 | 4/4 | 4/4 | 4/4 |
| esintl | 24.1% | 24.1% | 24.1% | 24.1% |
| ▸Array.prototype.toLocaleString | 1/1 | 1/1 | 1/1 | 1/1 |
| ▸Date.prototype.toLocaleDateString | 1/1 | 1/1 | 1/1 | 1/1 |
| ▸Date.prototype.toLocaleString | 1/1 | 1/1 | 1/1 | 1/1 |
| ▸Date.prototype.toLocaleTimeString | 1/1 | 1/1 | 1/1 | 1/1 |
| ▸DateTimeFormat | 0/7 | 0/7 | 0/7 | 0/7 |
| ▸Intl object | 0/2 | 0/2 | 0/2 | 0/2 |
| ▸Intl.Collator | 0/5 | 0/5 | 0/5 | 0/5 |
| ▸Intl.Collator.prototype.compare | 0/1 | 0/1 | 0/1 | 0/1 |
| ▸Intl.Collator.prototype.resolvedOptions | 0/1 | 0/1 | 0/1 | 0/1 |
| ▸Number.prototype.toLocaleString | 1/1 | 1/1 | 1/1 | 1/1 |
| ▸NumberFormat | 0/5 | 0/5 | 0/5 | 0/5 |
| ▸Object.prototype.toLocaleString | 1/1 | 1/1 | 1/1 | 1/1 |
| ▸String.prototype.localeCompare | 1/1 | 1/1 | 1/1 | 1/1 |
| esnext | 5.1% | 5.1% | 5.1% | 5.1% |
| Stage 2 | ||||
| Array.isTemplateObject | no | no | no | no |
| ▸Async Iterator Helpers | 0/17 | 0/17 | 0/17 | 0/17 |
| Generator function.sent Meta Property | no | no | no | no |
| ▸throw expressions | 0/4 | 0/4 | 0/4 | 0/4 |
| Stage 2.7 | ||||
| ShadowRealm | no | no | no | no |
| Stage 3 | ||||
| ▸Class and Property Decorators | 0/1 | 0/1 | 0/1 | 0/1 |
| ▸Explicit Resource Management | 0/8 | 0/8 | 0/8 | 0/8 |
| ▸Legacy RegExp features in JavaScript | 2/2 | 2/2 | 2/2 | 2/2 |
| ▸Map.prototype.upsert | 0/4 | 0/4 | 0/4 | 0/4 |
| non-standard | 2.0% | 2.9% | 2.9% | 2.9% |
| __count__ | no | no | no | no |
| __iterator__ | no | no | no | no |
| __noSuchMethod__ | no | no | no | no |
| __parent__ | no | no | no | no |
| "for each..in" loops | no | no | no | no |
| Array comprehensions (ES draft style) | no | no | no | no |
| Array comprehensions (JS 1.8 style) | no | no | no | no |
| Array generics | no | no | no | no |
| Callable RegExp | no | no | no | no |
| class extends null | no | no | no | no |
| Date.parse produces NaN for invalid dates | no | no | no | no |
| Date.prototype.toLocaleFormat | no | no | no | no |
| ▸decompilation | 0/4 | 0/4 | 0/4 | 0/4 |
| ECMAScript for XML (E4X) | no | no | no | no |
| error "columnNumber" | no | no | no | no |
| error "description" | no | no | no | no |
| error "fileName" | no | no | no | no |
| error "lineNumber" | no | no | no | no |
| error "stack" | yes | yes | yes | yes |
| Expression closures | no | no | no | no |
| function "arguments" property | no | no | no | no |
| function "arity" property | no | no | no | no |
| function "caller" property | no | yes | yes | yes |
| Function.prototype.isGenerator | no | no | no | no |
| Generator comprehensions (ES draft style) | no | no | no | no |
| Generator comprehensions (JS 1.8 style) | no | no | no | no |
| Generators (JS 1.8) | no | no | no | no |
| ▸global | 1/2 | 1/2 | 1/2 | 1/2 |
| Iterator | no | no | no | no |
| Object.observe | no | no | no | no |
| Object.prototype.eval | no | no | no | no |
| Object.prototype.unwatch | no | no | no | no |
| Object.prototype.watch | no | no | no | no |
| optional "scope" argument of "eval" | no | no | no | no |
| Proxy "ownKeys" handler, duplicate keys for non-extensible targets (ES 2017 semantics) | no | no | no | no |
| RegExp "x" flag | no | no | no | no |
| RegExp named groups | no | no | no | no |
| Sharp variables | no | no | no | no |
| ▸SIMD (Single Instruction, Multiple Data) | 0/57 | 0/57 | 0/57 | 0/57 |
| String generics | no | no | no | no |
| String.prototype.quote | no | no | no | no |
| String.prototype.replace flags | no | no | no | no |
| reactnative | 0.0% | 0.0% | 0.0% | 100.0% |
| syntax | ||||
| ▸async arrow with non-simple parameters | 0/3 | 0/3 | 0/3 | 3/3 |
| ▸class declaration in finally block | 0/3 | 0/3 | 0/3 | 3/3 |
| ▸super in object literal accessor | 0/2 | 0/2 | 0/2 | 2/2 |