var declarations |
Supported |
11 |
0 |
Hoisting, function scope, block visibility |
let declarations |
Supported |
(in var-decl tests) |
0 |
Block scoping, TDZ |
const declarations |
Supported |
(in var-decl tests) |
0 |
Immutability enforced |
| Number literals |
Supported |
(in expr tests) |
0 |
IEEE 754 f64 |
| String literals |
Supported |
(in expr tests) |
0 |
UTF-8, escape sequences |
| Boolean literals |
Supported |
(in type tests) |
0 |
|
null / undefined |
Supported |
(in type tests) |
0 |
|
| Arithmetic operators |
Supported |
16 |
0 |
+, -, *, /, % with coercion |
| Comparison operators |
Supported |
(in expr tests) |
0 |
==, ===, !=, !==, <, >, <=, >= |
| Unary operators |
Supported |
(in expr tests) |
0 |
typeof, delete, void, -, ! |
| Logical operators |
Supported |
2 |
0 |
&&, || with short-circuit evaluation |
| Bitwise operators |
Supported |
33 |
0 |
&, |, ^, ~, <<, >>, >>> |
| Ternary operator |
Supported |
4 |
0 |
? : |
| Exponentiation operator |
Supported |
2 |
19 |
**, **= (ES2016) |
| Nullish coalescing |
Supported |
1 |
0 |
?? (ES2020) |
| Logical assignment |
Supported |
6 |
0 |
&&=, ||=, ??= (ES2021) |
| Compound assignment |
Supported |
1 |
0 |
+=, -=, *=, **=, &=, |=, ^=, <<=, >>=, >>>= |
| Increment/decrement |
Supported |
1 |
0 |
++, -- (prefix and postfix) |
| Computed member access |
Supported |
1 |
0 |
obj[key] |
instanceof |
Supported |
2 |
0 |
Walks prototype chain |
in operator |
Supported |
1 |
0 |
Walks prototype chain |
delete operator |
Supported |
1 |
0 |
Member, computed, identifier |
void operator |
Supported |
1 |
0 |
Returns undefined |
| ToPrimitive (valueOf/toString coercion) |
Supported |
(in test262 tests) |
0 |
[Symbol.toPrimitive], valueOf(), toString() hint-based coercion |
Wrapper objects (new Number/String/Boolean) |
Supported |
(in test262 tests) |
0 |
new Number(), new String(), new Boolean() with valueOf()/toString() |
class declarations |
Supported |
10 |
0 |
constructor, methods, extends, super(), super.method(), static |
| Template literals |
Supported |
24 |
0 |
`${expr}` |
if/else |
Supported |
6 |
0 |
Nested, truthiness rules |
for loops |
Supported |
6 |
0 |
for (init; test; update), break, continue, let scoping |
for...in |
Supported |
20 |
0 |
Object key enumeration incl. prototype chain, arrays, break/continue, let/const scoping |
for...of |
Partial |
19 |
0 |
Arrays and strings only; no general iterator protocol yet |
while loops |
Supported |
3 |
0 |
break, continue |
do...while loops |
Supported |
2 |
0 |
Executes body at least once |
switch |
Supported |
1 |
0 |
Basic matching, fall-through, break, default |
| Function declarations |
Supported |
10 |
0 |
Hoisting, recursion, closures |
| Function expressions |
Supported |
(in func tests) |
0 |
Named and anonymous |
| Arrow functions |
Supported |
3 |
0 |
Expression/block body, lexical this, new rejection |
try/catch/finally |
Supported |
5 |
0 |
All clause combinations, catch param scoping |
throw |
Supported |
(in try-catch tests) |
0 |
Throw + catch integration |
| Array literals + methods |
Supported |
19 |
0 |
[1,2,3], Array.isArray(), Array.from(), Array.of(), .push(), .pop(), .join(), .indexOf(), .lastIndexOf(), .includes(), .slice(), .concat(), .reverse(), .shift(), .unshift(), .splice(), .fill(), .copyWithin(), .at(), .flat(), .flatMap(), .map(), .forEach(), .filter(), .find(), .findIndex(), .some(), .every(), .reduce(), .reduceRight(), .sort(), .toString(), .entries(), .keys(), .values(), .toReversed(), .toSorted(), .toSpliced(), .with() |
| Object literals |
Supported |
9 |
0 |
Creation, dot access, assignment, nesting, Object.keys/values/entries, Object.create, Object.getPrototypeOf, Object.assign, Object.defineProperty, Object.defineProperties, Object.getOwnPropertyDescriptor, Object.getOwnPropertyDescriptors, Object.getOwnPropertyNames, Object.setPrototypeOf, Object.freeze/isFrozen, Object.seal/isSealed, Object.preventExtensions/isExtensible, Object.is, Object.fromEntries, Object.hasOwn, .isPrototypeOf() |
this keyword |
Supported |
5 |
0 |
Global scope, constructors, method calls |
| String methods |
Supported |
3 |
0 |
.length, .charAt(), .indexOf(), .slice(), .padStart(), .padEnd(), .replaceAll(), .matchAll(), .at(), .codePointAt(), .normalize() (stub), String.fromCharCode(), String.fromCodePoint(), String.raw (ASCII-focused, chars() indexing) |
Function.name / .call() |
Supported |
1 |
0 |
Direct member-call only (fn.call(thisArg, ...)) |
Object.prototype.toString |
Supported |
1 |
0 |
Object.prototype.toString.call(value) type tagging |
hasOwnProperty / propertyIsEnumerable |
Supported |
2 |
0 |
Own vs inherited, enumerable check; works on objects and functions |
| Non-enumerable properties |
Supported |
(internal) |
0 |
Builtin prototype methods non-enumerable; for...in / Object.keys() / spread respect it |
| Function properties |
Supported |
(in test262 tests) |
0 |
fn.prop = val, fn.prop, fn.method() |
Spread / rest ... |
Supported |
6 |
0 |
Arrays, strings, function args/params, object spread, Symbol.iterator iterables; object spread key order non-deterministic for non-numeric keys |
| Destructuring |
Supported |
8 |
0 |
Array/object patterns in let/const/var, defaults, holes, rest, nesting, renaming, function params, arrow params, assignment, for-of/in; shorthand properties {x} and array elisions [1,,3] |
typeof |
Supported |
5 |
0 |
All value types |
Strict mode ("use strict") |
Supported |
61 |
0 |
Program/function/arrow/class; directive prologue detection, has_escape guard, reserved words, duplicate params, non-simple params, delete identifier, this binding, .call() coercion, eval/arguments binding restriction, with rejection, legacy octal rejection, octal escape rejection, undeclared variable ReferenceError |
eval() |
Supported |
3 |
0 |
Direct eval with scope access, indirect eval, strict mode isolation, parse errors as SyntaxError |
RegExp |
Supported |
73 |
0 |
Regex literals, RegExp constructor, test(), exec(), toString(), flags (g, i, m, s, u, y), lastIndex, String.prototype.match/search/replace/split/matchAll/replaceAll with regex; function replacers, $<name> named group substitution, [Symbol.match/replace/search/split] |
Symbol |
Supported |
25 |
0 |
Unique identity, .description, .toString(), Symbol.for()/Symbol.keyFor(), symbol-keyed properties, Object.getOwnPropertySymbols(), well-known symbols (iterator, toPrimitive, hasInstance, toStringTag, species, isConcatSpreadable, match, replace, search, split) |
WeakRef |
Supported |
8 |
0 |
new WeakRef(target), .deref(), TypeError on primitive target, uses Rc::downgrade()/Weak::upgrade() for genuine weak references |
FinalizationRegistry |
Supported |
8 |
0 |
new FinalizationRegistry(callback), .register(target, heldValue, token?), .unregister(token), TypeError on non-callable callback, target===token check |
WeakMap |
Supported |
12 |
0 |
new WeakMap(), new WeakMap(iterable), .get()/.set()/.has()/.delete(), object-key-only enforcement, .set() returns this for chaining |
Map |
Supported |
16 |
0 |
new Map(), new Map(iterable), .get()/.set()/.has()/.delete()/.clear(), .size, .forEach(), .entries()/.keys()/.values(), SameValueZero equality, insertion-order iteration |
Set |
Supported |
11 |
0 |
new Set(), new Set(iterable), .add()/.has()/.delete()/.clear(), .size, .forEach(), .entries()/.keys()/.values(), SameValueZero equality, deduplication |
WeakSet |
Supported |
5 |
0 |
new WeakSet(), new WeakSet(iterable), .add()/.has()/.delete(), object-key-only enforcement |
Date |
Supported |
25 |
0 |
new Date(), new Date(ms), new Date(string), new Date(year,month,...), Date.now(), Date.parse(), Date.UTC(), all getters/setters (local+UTC), toISOString(), toJSON(), toDateString(), toTimeString(), toUTCString(), toString(), valueOf() |
Proxy |
Supported |
17 |
0 |
new Proxy(target, handler), get/set/has/deleteProperty/apply traps, Proxy.revocable(), function proxy targets |
JSON |
Supported |
2 |
0 |
JSON.stringify() (replacer function/array, space, toJSON, circular detection, boxed primitives), JSON.parse() (reviver, strict JSON spec) |