V8 SpiderMonkey JavaScriptCore Chakra Carakan KJS Other
Feature name Current browser 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+
Android 4.0 Android 4.1 - 4.3 Android 4.4+ iOS7/8
§Object/array literal extensions 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 3/5 3/5 5/5 5/5
§Getter accessors No No 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 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 Yes Yes Yes Yes Yes Yes ? Yes Yes Yes Yes Yes ? ? Yes Yes Yes Yes ? ? Yes Yes
§Trailing commas in array literals No No Yes Yes Yes Yes Yes Yes ? Yes Yes Yes Yes Yes ? ? Yes Yes Yes Yes ? ? Yes Yes
§Reserved words as property names No No Yes Yes Yes Yes Yes Yes No No No Yes Yes Yes No No Yes Yes Yes Yes Yes Yes Yes Yes
§Object static methods 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 13/13 13/13 13/13 13/13
§Object.create No No Yes Yes No No Yes Yes No No Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
§Object.defineProperty No Yes[1] Yes Yes No No Yes Yes No No Yes[2] Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
§Object.defineProperties No No Yes Yes No No Yes Yes No No Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
§Object.getPrototypeOf No No Yes Yes No Yes Yes Yes No No Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
§Object.keys No No Yes Yes No No Yes Yes No No Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
§Object.seal No No Yes Yes No No Yes Yes No No No Yes Yes Yes No Yes Yes Yes Yes Yes Yes Yes Yes Yes
§Object.freeze No No Yes Yes No No Yes Yes No No No Yes Yes Yes No Yes Yes Yes Yes Yes Yes Yes Yes Yes
§Object.preventExtensions No No Yes Yes No No Yes Yes No No No Yes Yes Yes No Yes Yes Yes Yes Yes Yes Yes Yes Yes
§Object.isSealed No No Yes Yes No No Yes Yes No No No Yes Yes Yes No Yes Yes Yes Yes Yes Yes Yes Yes Yes
§Object.isFrozen No No Yes Yes No No Yes Yes No No No Yes Yes Yes No Yes Yes Yes Yes Yes Yes Yes Yes Yes
§Object.isExtensible No No Yes Yes No No Yes Yes No No No Yes Yes Yes No Yes Yes Yes Yes Yes Yes Yes Yes Yes
§Object.getOwnPropertyDescriptor No Yes[3] Yes Yes No No Yes Yes No No Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
§Object.getOwnPropertyNames No No Yes Yes No No Yes Yes No No Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
§Array methods 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 10/10 10/10 10/10
§Array.isArray No No Yes Yes No No Yes Yes No No Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
§Array.prototype.indexOf No No 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 No No 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 No No 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 No No 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 No No 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 No No 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 No No 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 No No Yes Yes Yes Yes Yes Yes No Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
§Array.prototype.reduceRight No No Yes Yes Yes Yes Yes Yes No Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
§String properties and methods 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 2/2 2/2 2/2
§Property access on strings No 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 No No Yes Yes No Yes Yes Yes No No Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
§Date methods 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 3/3 3/3 2/3
§Date.prototype.toISOString No No Yes Yes No Yes Yes Yes No Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
§Date.now No No Yes Yes Yes Yes Yes Yes No Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
§Date.prototype.toJSON No No Yes Yes No No Yes Yes No No No No No Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes No
§Function.prototype.bind No No Yes Yes No No Yes Yes No No No Yes Yes Yes No No Yes Yes Yes Yes Yes Yes Yes Yes
§JSON No Yes Yes Yes No Yes Yes Yes No Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
§Immutable globals 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 3/3 3/3 3/3
§undefined No No Yes Yes No No Yes Yes No No Yes Yes Yes Yes No No No No Yes Yes No Yes Yes Yes
§NaN No No Yes Yes No No Yes Yes No No Yes Yes Yes Yes No No No No Yes Yes No Yes Yes Yes
§Infinity No No Yes Yes No No Yes Yes No No Yes Yes Yes Yes No No No No Yes Yes No Yes Yes Yes
§Miscellaneous 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 2/11 3/11 8/11 9/11
§Array.prototype.sort: compareFn must be function or undefined No No Yes Yes No No No Yes No No No No No No No No No No No No No No No No
§Array.prototype.sort: compareFn may be explicit undefined No No Yes Yes No No Yes Yes No Yes Yes Yes Yes Yes No No No Yes Yes Yes Yes Yes Yes Yes
§Date.parse produces NaN for invalid dates No No No No Yes Yes No No No Yes Yes Yes Yes Yes No No No No No No Yes Yes No Yes
§Function.prototype.apply permits array-likes ? ? Yes Yes No No Yes Yes No No Yes Yes Yes Yes No No No Yes Yes Yes ? ? Yes Yes
§parseInt ignores leading zeros No No Yes Yes No No No Yes No No No No Yes Yes No No No No No Yes No No Yes Yes
§Function "prototype" property is non-enumerable ? ? Yes Yes No No Yes Yes ? Yes Yes Yes Yes Yes No No No Yes Yes Yes ? ? Yes Yes
§Arguments toStringTag is "Arguments" ? ? Yes Yes No No Yes Yes ? Yes Yes Yes Yes Yes ? ? Yes Yes Yes Yes ? ? Yes Yes
§Zero-width chars in identifiers No No Yes Yes No No Yes[6] Yes No No No No Yes Yes No No No No Yes Yes No Yes Yes Yes
§Unreserved words ? ? Yes Yes Yes Yes Yes Yes ? Yes Yes Yes Yes Yes No No No Yes Yes Yes ? ? Yes Yes
§Enumerable properties can be shadowed by non-enumerables ? ? No No Yes Yes Yes Yes No No No No No No No No No No No No ? ? No No
§Thrown functions have proper "this" values ? ? Yes Yes Yes Yes Yes Yes ? Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes ? ? Yes Yes
§Strict mode No No No Yes[7] No No Yes Yes[8] No No No Yes Yes Yes No No No Yes 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).