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+ 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 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
§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
§Trailing commas in object literals No No No 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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
§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
§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
§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
§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
§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
§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
§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 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 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 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
§String.prototype.trim Yes No No Yes Yes No Yes Yes Yes No No 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 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 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 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 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 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 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 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 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 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 No No No No Yes Yes No No Yes Yes No Yes Yes Yes Yes Yes No No Yes Yes Yes
§Miscellaneous 4/11 0/11 0/11 9/11 9/11 4/11 4/11 8/11 10/11 0/11 6/11 7/11 7/11 9/11 9/11 1/11 1/11 2/11 6/11 7/11 8/11 1/11 7/11 7/11 10/11 1/11 1/11 1/11 3/11 2/11 9/11 3/11 2/11 3/11 8/11 9/11
§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 ? 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 No No No Yes Yes Yes ? Yes Yes Yes ? ? ? ? ? Yes ? Yes Yes Yes Yes
§Date.parse produces NaN for invalid dates Yes No No No No Yes Yes No No No Yes Yes Yes Yes Yes No No No No No No Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes No Yes
§Function.prototype.apply permits array-likes No ? ? Yes Yes No No Yes Yes No No 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 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 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 ? 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 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 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 ? 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
§Strict mode No No No No Yes[7] No No Yes Yes[8] No No No Yes Yes Yes No No No Yes Yes Yes No No Yes Yes No No No Yes No Yes Yes No Yes Yes Yes

[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 has a bug with strict mode which makes the following expression "fail", even though strict mode is more or less supported: (function(){ "use strict"; return !this })()

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