| Feature name | Current browser | es5-shim | IE 7 | IE 8 | IE 9 | IE 10-11 | Edge 13+ | FF 2 | FF 3 | FF 3.5 | FF 3.6 | FF 4 | FF 5-7 | FF 8-20 | FF 21-45 | FF 46+ | SF 3.2 | SF 4 | SF 5 | SF 5.1.4 | SF 6-8 | SF 9 | SF 10 | SF TP | WebKit | CH 5 | CH 6 | CH 7-12 | CH 13-16 | CH 19-22 | CH 23-53, OP 15-40 |
CH 54+, OP 41+ |
OP 10.1 | OP 10.50-11.50 | OP 11.60-OP 12 | OP 12.10 | Konq 4.3 | Konq 4.9 | Konq 4.13 | BESEN | Rhino 1.7 | PhantomJS 2.0 | EJS | Android 4.0 | Android 4.1 - 4.3 | Android 4.4+ | iOS7/8/9 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| §Object/array literal extensions | 0/5 | 0/5 | 0/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 2/5 | 4/5 | 4/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 2/5 | 2/5 | 5/5 | 5/5 | 5/5 | 5/5 | 5/5 | 2/5 | 2/5 | 3/5 | 5/5 | 2/5 | 2/5 | 3/5 | 3/5 | 2/5 | 5/5 | 3/5 | 3/5 | 3/5 | 5/5 | 5/5 | ||
| §Getter accessors | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Setter accessors | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Trailing commas in object literals | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ? | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ? | ? | Yes | Yes | Yes | Yes | Yes | No | ? | ? | Yes | ? | ? | ? | ? | ? | Yes | ? | ? | ? | Yes | Yes | ||
| §Trailing commas in array literals | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ? | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ? | ? | Yes | Yes | Yes | Yes | Yes | No | ? | ? | Yes | ? | ? | ? | ? | ? | Yes | ? | ? | ? | Yes | Yes | ||
| §Reserved words as property names | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Object static methods | 1/13 | 0/13 | 2/13 | 13/13 | 13/13 | 13/13 | 0/13 | 0/13 | 1/13 | 1/13 | 13/13 | 13/13 | 13/13 | 13/13 | 13/13 | 0/13 | 0/13 | 7/13 | 13/13 | 13/13 | 13/13 | 13/13 | 13/13 | 13/13 | 7/13 | 13/13 | 13/13 | 13/13 | 13/13 | 13/13 | 13/13 | 0/13 | 0/13 | 13/13 | 13/13 | 0/13 | 3/13 | 13/13 | 13/13 | 13/13 | 13/13 | 13/13 | 13/13 | 13/13 | 13/13 | 13/13 | ||
| §Object.create | No | No | No | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Object.defineProperty | No | No | Yes[1] | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | Yes[2] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Object.defineProperties | No | No | No | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Object.getPrototypeOf | No | No | No | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Object.keys | Yes | No | No | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Object.seal | No | No | No | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Object.freeze | No | No | No | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Object.preventExtensions | No | No | No | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Object.isSealed | No | No | No | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Object.isFrozen | No | No | No | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Object.isExtensible | No | No | No | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Object.getOwnPropertyDescriptor | No | No | Yes[3] | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Object.getOwnPropertyNames | No | No | No | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Array methods | 10/10 | 0/10 | 0/10 | 10/10 | 10/10 | 10/10 | 7/10 | 9/10 | 9/10 | 9/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 7/10 | 9/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 7/10 | 10/10 | 10/10 | 10/10 | 9/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | 10/10 | ||
| §Array.isArray | Yes | No | No | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Array.prototype.indexOf | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Array.prototype.lastIndexOf | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Array.prototype.every | Yes[4] | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Array.prototype.some | Yes[4] | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Array.prototype.forEach | Yes[4] | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Array.prototype.map | Yes[4] | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Array.prototype.filter | Yes[4] | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Array.prototype.reduce | Yes[4] | No | No | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Array.prototype.reduceRight | Yes[4] | No | No | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §String properties and methods | 1/2 | 0/2 | 1/2 | 2/2 | 2/2 | 2/2 | 1/2 | 1/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 1/2 | 1/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 1/2 | 2/2 | 2/2 | 2/2 | 1/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | 2/2 | ||
| §Property access on strings | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §String.prototype.trim | Yes | No | No | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Date methods | 3/3 | 0/3 | 0/3 | 3/3 | 3/3 | 3/3 | 1/3 | 1/3 | 2/3 | 2/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 0/3 | 2/3 | 2/3 | 2/3 | 2/3 | 2/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 0/3 | 2/3 | 3/3 | 3/3 | 2/3 | 2/3 | 3/3 | 3/3 | 3/3 | 2/3 | 2/3 | 3/3 | 3/3 | 3/3 | 2/3 | ||
| §Date.prototype.toISOString | Yes | No | No | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | ||
| §Date.now | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Date.prototype.toJSON | Yes | No | No | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes[5] | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | No | ||
| §Function.prototype.bind | Yes | No | No | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §JSON | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| §Immutable globals | 0/3 | 0/3 | 0/3 | 3/3 | 3/3 | 3/3 | 0/3 | 0/3 | 0/3 | 0/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 0/3 | 0/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 0/3 | 0/3 | 0/3 | 0/3 | 3/3 | 3/3 | 3/3 | 0/3 | 0/3 | 3/3 | 3/3 | 0/3 | 3/3 | 3/3 | 3/3 | 3/3 | 3/3 | 0/3 | 0/3 | 3/3 | 3/3 | 3/3 | ||
| §undefined | No | No | No | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | No | No | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | ||
| §NaN | No | No | No | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | No | No | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | ||
| §Infinity | No | No | No | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | No | No | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | ||
| §Miscellaneous | 3/10 | 0/10 | 0/10 | 9/10 | 9/10 | 10/10 | 3/10 | 3/10 | 3/10 | 4/10 | 7/10 | 8/10 | 9/10 | 10/10 | 10/10 | 0/10 | 5/10 | 6/10 | 6/10 | 8/10 | 8/10 | 8/10 | 8/10 | 8/10 | 1/10 | 1/10 | 2/10 | 6/10 | 7/10 | 8/10 | 9/10 | 0/10 | 6/10 | 6/10 | 9/10 | 0/10 | 0/10 | 0/10 | 2/10 | 1/10 | 8/10 | 2/10 | 1/10 | 2/10 | 8/10 | 8/10 | ||
| §Array.prototype.sort: compareFn must be function or undefined | Yes | No | No | Yes | Yes | Yes | No | No | No | No | No | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | ? | Yes | Yes | Yes | ? | ? | ? | ? | ? | No | ? | No | No | No | No | ||
| §Array.prototype.sort: compareFn may be explicit undefined | Yes | No | No | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | ? | Yes | Yes | Yes | ? | ? | ? | ? | ? | Yes | ? | Yes | Yes | Yes | Yes | ||
| §Function.prototype.apply permits array-likes | No | ? | ? | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | ? | Yes | Yes | Yes | ? | ? | ? | ? | ? | Yes | ? | ? | ? | Yes | Yes | ||
| §parseInt ignores leading zeros | Yes | No | No | Yes | Yes | Yes | No | No | No | No | No | No | No | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes | Yes | No | No | No | No | No | No | No | Yes | No | Yes | Yes | No | No | Yes | Yes | ||
| §Function "prototype" property is non-enumerable | No | ? | ? | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | ? | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | ? | No | No | Yes | ? | ? | ? | ? | ? | Yes | ? | ? | ? | Yes | Yes | ||
| §Arguments toStringTag is "Arguments" | No | ? | ? | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | ? | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ? | ? | Yes | Yes | Yes | Yes | Yes | ? | No | No | Yes | ? | ? | ? | ? | ? | Yes | ? | ? | ? | Yes | Yes | ||
| §Zero-width chars in identifiers | No | No | No | Yes | Yes | Yes | No | No | No | No | No | No | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes | Yes | Yes | No | No | No | Yes | No | No | No | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | ||
| §Unreserved words | No | ? | ? | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ? | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | ? | Yes | Yes | Yes | ? | ? | ? | ? | ? | Yes | ? | ? | ? | Yes | Yes | ||
| §Enumerable properties can be shadowed by non-enumerables | No | ? | ? | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | Yes | ? | Yes | Yes | Yes | ? | ? | ? | ? | ? | No | ? | ? | ? | No | No | ||
| §Thrown functions have proper "this" values | No | ? | ? | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ? | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ? | Yes | Yes | Yes | ? | ? | ? | ? | ? | Yes | ? | ? | ? | Yes | Yes | ||
| §Strict mode | 0/18 | 0/18 | 0/18 | 0/18 | 18/18 | 18/18 | 1/18 | 1/18 | 1/18 | 1/18 | 17/18 | 17/18 | 17/18 | 17/18 | 18/18 | 0/18 | 0/18 | 0/18 | 17/18 | 17/18 | 17/18 | 18/18 | 18/18 | 18/18 | 0/18 | 0/18 | 0/18 | 18/18 | 18/18 | 18/18 | 18/18 | 0/18 | 0/18 | 18/18 | 18/18 | 0/18 | 0/18 | 0/18 | 18/18 | 0/18 | 17/18 | 18/18 | 0/18 | 18/18 | 18/18 | 17/18 | ||
| §reserved words | No | No | No | No | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No | Yes | Yes | No | Yes | Yes | Yes | ||
| §"this" is undefined in functions | No | No | No | No | Yes[6] | Yes[6] | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No | Yes | Yes | No | Yes | Yes | Yes | ||
| §"this" is not coerced to object in primitive methods | No | No | No | No | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No | Yes | Yes | No | Yes | Yes | Yes | ||
| §"this" is not coerced to object in primitive accessors | No | No | No | No | Yes | Yes | No | No | No | No | No | No | No | No | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No | Yes | Yes | No | Yes | Yes | Yes | ||
| §legacy octal is a SyntaxError | No | No | No | No | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No | Yes | Yes | No | Yes | Yes | Yes | ||
| §assignment to unresolvable identifiers is a ReferenceError | No | No | No | No | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No | Yes | Yes | No | Yes | Yes | Yes | ||
| §assignment to eval or arguments is a SyntaxError | No | No | No | No | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No | Yes | Yes | No | Yes | Yes | Yes | ||
| §assignment to non-writable properties is a TypeError | No | No | No | No | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No | Yes | Yes | No | Yes | Yes | Yes | ||
| §eval or arguments bindings is a SyntaxError | No | No | No | No | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No | Yes | Yes | No | Yes | Yes | Yes | ||
| §arguments.caller and arguments.callee is a TypeError | No | No | No | No | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No | Yes | Yes | No | Yes | Yes | Yes | ||
| §(function(){}).caller and (function(){}).arguments is a TypeError | No | No | No | No | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No | Yes | Yes | No | Yes | Yes | Yes | ||
| §arguments is unmapped | No | No | No | No | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No | Yes | Yes | No | Yes | Yes | Yes | ||
| §eval() can't create bindings | No | No | No | No | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No | Yes | Yes | No | Yes | Yes | Yes | ||
| §deleting bindings is a SyntaxError | No | No | No | No | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No | Yes | Yes | No | Yes | Yes | Yes | ||
| §deleting non-configurable properties is a TypeError | No | No | No | No | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No | Yes | Yes | No | Yes | Yes | Yes | ||
| §"with" is a SyntaxError | No | No | No | No | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No | Yes | Yes | No | Yes | Yes | Yes | ||
| §repeated parameter names is a SyntaxError | No | No | No | No | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No | Yes | Yes | No | Yes | Yes | Yes | ||
| §function expressions with matching name and argument are valid | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No | No | Yes | No | No | Yes | No | Yes | Yes | No | ||
[1] In Internet Explorer 8 Object.defineProperty only accepts DOM objects (MSDN reference).
[2] In some versions of Safari 5, Object.defineProperty does not work with DOM objects.
[3] In Internet Explorer 8 Object.getOwnPropertyDescriptor only accepts DOM objects (MSDN reference).
[4] Internet Explorer 6 - 8 do not differentiate between a dense array with undefined values, and a sparse array. Specifically, `0 in [,]` and `0 in [undefined]` both yield false - whereas in a compliant browser, the former would give `false`, the latter `true`. As such, ES5 array iteration methods can only be shimmed reliably when dealing with dense arrays.
[5] In Opera 11.60-11.64 Date.prototype.toJSON is undefined.
[6] IE10 PP2 fails this test.