V8 SpiderMonkey JavaScriptCore Chakra Carakan KJS Other
Feature name Current browser es5-shim IE 7 IE 8 IE 9 IE 10+ FF 3 FF 3.5, 3.6 FF 4-20 FF 21+ SF 3.2 SF 4 SF 5 SF 5.1.4 SF 6+ SF TP WebKit CH 5 CH 6 CH 7-12 CH 13-16 CH 19-22 CH 23+,
OP 15+
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
§Object/array literal extensions 0/5 0/5 0/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 2/5 2/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
§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
§Trailing commas in object literals No No No 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 No ? ? Yes ? ? ? ? ? Yes ? ? ? Yes Yes
§Reserved words as property names No No No Yes Yes Yes Yes Yes Yes No No No Yes Yes Yes Yes No No 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 0/13 1/13 13/13 13/13 0/13 0/13 7/13 13/13 13/13 13/13 13/13 7/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 No No Yes Yes No No 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 No No Yes Yes No No Yes[2] 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 No No Yes Yes No No 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 No Yes Yes Yes No No 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 No No Yes Yes No No 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 No No Yes Yes No No No Yes Yes Yes Yes No 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 No No Yes Yes No No No Yes Yes Yes Yes No 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 No No Yes Yes No No No Yes Yes Yes Yes No 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 No No Yes Yes No No No Yes Yes Yes Yes No 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 No No Yes Yes No No No Yes Yes Yes Yes No 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 No No Yes Yes No No No Yes Yes Yes Yes No 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 No No Yes Yes No No 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 No No Yes Yes No No 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 9/10 9/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 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 No No Yes Yes No No 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
§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
§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
§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
§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
§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
§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
§Array.prototype.reduce Yes[4] No No Yes Yes Yes Yes Yes Yes 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
§Array.prototype.reduceRight Yes[4] No No Yes Yes Yes Yes Yes Yes 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
§String properties and methods 1/2 0/2 1/2 2/2 2/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 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
§String.prototype.trim Yes No No Yes Yes No Yes Yes Yes No No 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 1/3 2/3 3/3 3/3 0/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 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 No Yes Yes Yes No 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 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
§Date.prototype.toJSON Yes No No Yes Yes No No Yes Yes No No No No No 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 No No Yes Yes No No No Yes Yes Yes Yes No No 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 No Yes Yes Yes No 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 0/3 0/3 3/3 3/3 0/3 0/3 3/3 3/3 3/3 3/3 3/3 0/3 0/3 0/3 0/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 No No Yes Yes No No Yes Yes Yes Yes Yes No No No No Yes Yes No No Yes Yes No Yes Yes Yes Yes Yes No No Yes Yes Yes
§NaN No No No Yes Yes No No Yes Yes No No Yes Yes Yes Yes Yes No No No No Yes Yes No No Yes Yes No Yes Yes Yes Yes Yes No No Yes Yes Yes
§Infinity No No No Yes Yes No No Yes Yes No No Yes Yes Yes Yes Yes No No No No 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 3/10 3/10 8/10 10/10 0/10 5/10 6/10 6/10 8/10 8/10 8/10 1/10 1/10 2/10 6/10 7/10 8/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 No No No Yes 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 No No Yes Yes No Yes Yes Yes Yes Yes Yes No No No Yes Yes Yes ? Yes Yes Yes ? ? ? ? ? Yes ? Yes Yes Yes Yes
§Function.prototype.apply permits array-likes No ? ? Yes Yes No No Yes Yes No No Yes Yes Yes Yes Yes No No No Yes Yes Yes ? Yes Yes Yes ? ? ? ? ? Yes ? ? ? Yes Yes
§parseInt ignores leading zeros Yes No No Yes Yes No No No Yes No No No No Yes Yes Yes No No No No No 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 No No Yes Yes ? Yes Yes Yes Yes Yes Yes No No No Yes Yes Yes ? No No Yes ? ? ? ? ? Yes ? ? ? Yes Yes
§Arguments toStringTag is "Arguments" No ? ? Yes Yes No No 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 No No Yes[6] Yes No No No No Yes Yes Yes No No No No 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 No No No Yes Yes Yes ? Yes Yes Yes ? ? ? ? ? Yes ? ? ? Yes Yes
§Enumerable properties can be shadowed by non-enumerables No ? ? No No Yes Yes Yes Yes No No No No No No No No No No No No No ? 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
§Strict mode 0/17 0/17 0/17 0/17 17/17 0/17 0/17 17/17 17/17 0/17 0/17 0/17 16/17 16/17 16/17 17/17 0/17 0/17 0/17 17/17 17/17 17/17 0/17 0/17 17/17 17/17 0/17 0/17 0/17 17/17 0/17 16/17 17/17 0/17 17/17 17/17 16/17
§reserved words No No No No Yes No No Yes Yes No No No Yes Yes Yes Yes No No No 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[7] No No Yes Yes No No No Yes Yes Yes Yes No No No 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 No No Yes[8] Yes[8] No No No Yes Yes Yes Yes No No No 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 No No Yes Yes No No No Yes Yes Yes Yes No No No 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 No No Yes Yes No No No Yes Yes Yes Yes No No No 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 No No Yes Yes No No No Yes Yes Yes Yes No No No 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 No No Yes Yes No No No Yes Yes Yes Yes No No No 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 No No Yes Yes No No No Yes Yes Yes Yes No No No 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 No No Yes Yes No No No Yes Yes Yes Yes No No No 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 No No Yes Yes No No No Yes Yes Yes Yes No No No 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 No No Yes Yes No No No Yes Yes Yes Yes No No No 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 No No Yes Yes No No No Yes Yes Yes Yes No No No 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 No No Yes Yes No No No Yes Yes Yes Yes No No No 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 No No Yes Yes No No No Yes Yes Yes Yes No No No 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 No No Yes Yes No No No Yes Yes Yes Yes No No No 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 No No Yes Yes No No No Yes Yes Yes Yes No No No 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 No No Yes Yes No No No No No No Yes No No No 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] Firefox 4 & 5 fail this test

[7] IE10 PP2 fails this test.

[8] In Firefox, strict getters on String, Boolean and Number prototypes receive wrapped this values (Bugzilla reference).