ECMAScript Support Matrix

Copyright © 2005–2010 Thomas Lahn <js@PointedEars.de> (contributors)

Last modified: 2010-06-17T10:50:45+00:00

Available online at http://PointedEars.de/scripts/test/es-matrix/

Table of Contents

↑ top of document

Language Features

↑ table of contents

The following table lists all features of ECMAScript implementations that are not part of the first versions/editions of all of these languages, with the version/edition that introduced it; furthermore, information about features that have been deprecated is included. That means if a language feature is not listed here, you can consider it to be universally supported.

In addition, features have been highlighted with a greenish background color if this author considers them safe to use without prior feature test even when they do not appear to be formally specified or to be supported among all versions of all implementations considered here. This is based on the fact that all minimum versions of the implementations that a feature requires can be considered obsolete because the user agents known to implement them can be considered obsolete (see the respective version information for details). Note that this assessment is likely to be subject to change as more implementations are evaluated. If taken as a recommendation for design decisions, it should be taken as a light one.

The content of this table is based on what could be found in vendor's online documentations to date and on occasions where the respective features could be tested; it does not claim to be accurate or complete (please note how each feature is marked). Any correction/addition as to how things really are is welcome and will be credited where it is due.

If you are using Firefox 3.0.x and the scrollable table body flows out of the table, you are observing Bug 423823, fixed since Firefox 3.0.2. Since this was a regression, this author deems it necessary not to cover it with a workaround. The Firefox 3.0 branch has met its end-of-life on 2010-03-30 CE. If you are still using Firefox 3.0.x as your primary browser, you are strongly recommended to update Firefox. As an alternative, you can toggle table body scrollability.

Feature
! A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
ECMAScript This impl.[1] JavaScript JScript V8 JSC Opera KJS
Legend: Untested assumed availability Untested documented feature Feature availability confirmed by test
* discrepancy between the vendor's documentation and the real implementation
? unconfirmed contribution by other people

When a feature has been marked as tested, the following user agents have been used for the tests:

  • JavaScript
    • Mozilla/4.78 [de] (Windows NT 5.0; U)
    • Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.13) Gecko/20060410 Firefox/1.0.8
    • Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.12) Gecko/20070508 Firefox/1.5.0.12
    • Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14
    • Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3
    • Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4
    • Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5
    • Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.11) Gecko/2009061212 Iceweasel/3.0.11 (Debian-3.0.11-1)
    • Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.3) Gecko/20091010 Iceweasel/3.5.3 (Debian-3.5.3-2)
    • Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.4) Gecko/20091028 Iceweasel/3.5.4 (Debian-3.5.4-1)
    • Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.5) Gecko/20091112 Iceweasel/3.5.5 (like Firefox/3.5.5; Debian-3.5.5-1)
    • Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.6) Gecko/20091216 Iceweasel/3.5.6 (like Firefox/3.5.6; Debian-3.5.6-1)
    • Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100404 Iceweasel/3.6.3 (like Firefox/3.6.3)
  • JScript
    • Mozilla/4.0 (compatible; MSIE 4.01; Windows NT 5.0)
    • Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
    • Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
    • Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
    • Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
  • V8
    • Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.43 Safari/532.5
    • Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.9 Safari/533.2
  • JSC
    • Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/412.6.2 (KHTML, like Gecko) Safari/412.2.2 (Safari 2.0)
    • Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
    • Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE) AppleWebKit/525.19 (KHTML, like Gecko) Version/3.1.2 Safari/525.21
    • Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1
    • Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17
    • Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9.1
    • Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10
  • Opera ECMAScript
    • Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 5.1) Opera 5.02 [en]
    • Mozilla/4.0 (compatible; MSIE 5.0; Windows XP) Opera 6.06 [en]
    • Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.02 [en]
    • Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 8.0
  • KJS
    • Mozilla/5.0 (compatible; Konqueror/3.5; Linux 2.6.29.4-20090531.213230+0200; X11; i686; de, en_US) KHTML/3.5.10 (like Gecko) (Debian package 4:3.5.10.dfsg.1-2)
    • Mozilla/5.0 (compatible; Konqueror/4.3; Linux 2.6.31.1-20090928.230129+0200; X11; i686; de) KHTML/4.3.2 (like Gecko)
!== 3 [11.9.5] 1.3 5.1.5010 1.3 412.6.2 5.02 3.5.9
"\uhhhh" : string 1 [7.7.4/7.8.4] 1.3 5.1.5010 1.3 525.13 6.06 4.3.4
"foo\
bar" : string
5 [7.8.4] N/A 1.8.1 5.1.5010 1.3 525.13 [2] 4.3.2
+expression : number 1 1.3 3.1.3510 1.3 525.13 5.02 3.5.9
/[^]/ : RegExp 3 N/A 1.5 2.1 530.17 5.02 4.4.3
//[g][i] : RegExp 1.2 3.1.3510 1.3 525.13 5.02 3.5.9
//[g][i][m]: RegExp 3 1.5 5.5.6330 1.3 525.13 5.02 3.5.9
//[g][i][m][y] : RegExp N/A 1.8.1 531.9
/(?!)/ : RegExp 3 1.5 5.5.6330 1.3 525.13 7.02 3.5.9
/(?:)/ : RegExp 3 1.5 5.5.6330 1.3 525.13 7.02 3.5.9
/(?=)/ : RegExp 3 1.5 5.5.6330 1.3 525.13 7.02 3.5.9
/(+?|*?)/ : RegExp 3 1.5 5.5.6330 1.3 525.13 7.02 3.5.9
/\uhhhh/ : RegExp 3 1.3 5.1.5010 1.3 525.13 6.06 4.3.4
label: 3 1.5 3.1.3510 1.3 525.13 5.02 3.5.9
identifier : type 4 N/A 2.0 7.0
== 1 1.0[3] 5.1.5010 1.3 525.13 5.02 3.5.9
=== 3 1.3 5.1.5010 1.3 525.13 5.02 4.3.2
[value, ] : Array 3 1.3 5.1.5010 1.3 525.13 5.02 4.3.4
[value, ] : Array 3 1.3 5.1.5010 1.3 525.13 7.02[4] 4.3.4
[expression for (propertyName in Object) [if (condition)]] : Array
[expression for each (propertyValue in Object) [if (condition)]] : Array[V]
N/A 1.7
[var] [var1, [var2], var3, ] = Array N/A 1.7
var \uhhhh 3 1.5 5.5.6330 2.0 525.13 6.06 4.3.4
{propertyName: propertyValue, } : Object 3 1.3 5.1.5010 1.3 525.13 5.02 3.5.9
{propertyName: propertyValue, } : Object 5 N/A 1.3 1.3 525.13 4.3.4
abstract 4 N/A 2.0 7.0
new ActiveXObject("serverName.typeName"[, location : String]) 3.0
arguments 1 1.1 5.1.5010 1.3 525.13 5.02 4.3.4
arguments.callee : Function 1 1.2 5.1.5010 1.3 525.13 5.02 4.3.4
arguments.caller : Function|null 1.1[5] [6]
arguments.length : number|int 1 1.1 5.1.5010 1.3 525.13 5.02 4.3.4
Array() 1 1.1 2.0 5.02
Array.every(iterable, callback : Function) : boolean 1.6
Array.isArray(arg) : boolean 5 [15.4.3.2]
array.length : number|int 1 N/A 1.1
Array.some(iterable, callback : Function) : boolean 1.6
Array.prototype : Array 1 5.1.5010 5.02
Array.prototype.concat([item1[, item2[, ]]]) : Array 3 1.2 3.0 5.02
Array.prototype.constructor : Array 1 1.1
Array.prototype.every(callback : Function[, thisValue]) : boolean 5 [15.4.4.16] 1.6
Array.prototype.filter(callback : Function[, thisArg : Object]) : number|int 5 [15.4.4.20] 1.6
Array.prototype.forEach(callback : Function[, thisArg : Object]) : number|int 5 [15.4.4.18] 1.6
Array.prototype.indexOf(searchElement[, fromIndex : Number|int]) : number|int 5 [15.4.4.14] 1.6
Array.prototype.join(separator : String) : string 1 1.1 2.0 5.02
Array.prototype.lastIndexOf(searchElement[, fromIndex : Number|int]) : number|int 5 [15.4.4.15] 1.6
Array.prototype.length : number|int 1 1.1 2.0 5.02
Array.prototype.map(callback : Function[, thisArg : Object]) : number|int 5 [15.4.4.19] 1.6
Array.prototype.pop() 3 1.2 5.5 5.02
Array.prototype.push([item1[, item2[, ]]]) : number|int 3 N/A 1.2 5.5 5.02
Array.prototype.reduce(callback : Function[, initialValue]) : any 5 [15.4.4.21] N/A 1.8
Array.prototype.reduceRight(callback : Function[, initialValue]) : any 5 [15.4.4.22] N/A 1.8
Array.prototype.reverse() : Array 1 N/A 1.1 2.0 5.02
Array.prototype.shift() 3 N/A 1.2 5.5 5.02
Array.prototype.slice(start : Number|int[, end : Number|int]) : Array 3 N/A 1.2 3.0 5.02[7]
Array.prototype.some(callback : Function[, thisValue]) : boolean 5 [15.4.4.17] N/A 1.6
Array.prototype.sort([comparator : Function]) : Array 1 N/A 1.1[8][9][10] 2.0
Array.prototype.splice(start : Number|int, deleteCount : Number|int[, item1[, item2[, ]]]) : Array 3 N/A 1.2[11] 5.5.6330
Array.prototype.toSource() : string N/A 1.3
Array.prototype.toString() : string 1 N/A 1.1
Array.prototype.unshift() : number|int 3 N/A 1.2? 5.5
boolean 4 N/A 2.0 7.0
Boolean() 1 N/A 1.1 2.0
Boolean.prototype : Boolean 1 5.1.5010 5.02
Boolean.prototype.toSource() : string N/A 1.3
Boolean.prototype.toString() : string 1 N/A 1.1
Boolean.prototype.valueOf() : boolean 1 N/A 1.1
byte 4 N/A 2.0 7.0
@cc_on N/A 3.0
char 4 N/A 2.0 7.0
class 4 N/A 2.0 7.0
const 4 N/A 1.5 7.0
Date.prototype : Date 1 5.1.5010 5.02
Date.prototype.getFullYear() : number|int 1 N/A 1.3 3.0
Date.prototype.getMilliseconds() : number|int 1 N/A 1.3 3.0
Date.prototype.getUTCDate() : number|int 1 N/A 1.3 3.0
Date.prototype.getUTCDay() : number|int 1 N/A 1.3 3.0
Date.prototype.getUTCFullYear() : number|int 1 N/A 1.3 3.0
Date.prototype.getUTCHours() : number|int 1 N/A 1.3 3.0
Date.prototype.getUTCMilliseconds() : number|int 1 N/A 1.3 3.0
Date.prototype.getUTCMinutes() : number|int 1 N/A 1.3 3.0
Date.prototype.getUTCMonth() : number|int 1 N/A 1.3 3.0
Date.prototype.getUTCSeconds() : number|int 1 N/A 1.3 3.0
Date.prototype.getVarDate() N/A 3.0
Date.prototype.setFullYear(year : Number|int[, month : Number|int[, date : Number|int]]) : number|int 1 N/A 1.3 3.0
Date.prototype.setMilliseconds(Number|int) : number|int 1 N/A 1.3 3.0
Date.prototype.setUTCDate(Number|int) : number|int 1 N/A 1.3 3.0
Date.prototype.setUTCDay(Number|int) : number|int 1 N/A 1.3 3.0
Date.prototype.setUTCFullYear(year : Number|int[, month : Number|int[, date : Number|int]]) : number|int 1 N/A 1.3 3.0
Date.prototype.setUTCHours(hours : Number|int[, minutes : Number|int[, seconds : Number|int]]) : number|int 1 N/A 1.3 3.0
Date.prototype.setUTCMilliseconds(Number|int) : number|int 1 N/A 1.3 3.0
Date.prototype.setUTCMinutes(minutes : Number|int[, seconds : Number|int[, ms : Number|int]]) : number|int 1 N/A 1.3 3.0
Date.prototype.setUTCMonth(month : Number|int[, date : Number|int]) : number|int 1 N/A 1.3 3.0
Date.prototype.setUTCSeconds(seconds : Number|int[, ms : Number|int]) : number|int 1 N/A 1.3 3.0
Date.prototype.toDateString() : string 3 1.5 5.5.6330 525.13 5.02 3.5.9
Date.prototype.toGMTString() : string 1 1.3 5.1.5010 525.13 5.02 3.5.9
Date.prototype.toISOString() : string 5 1.8.1
Date.prototype.toJSON([key]) : string 5 1.8.1
Date.prototype.toLocaleDateString() : string 3 1.5 5.5.6330 525.13 5.02 3.5.9
Date.prototype.toLocaleFormat(format : String) : string 1.6
Date.prototype.toLocaleString() : string 1 1.3 5.1.5010 525.13 5.02 3.5.9
Date.prototype.toLocaleTimeString() : string 3 1.5 5.5.6330 525.13 5.02 3.5.9
Date.prototype.toSource() : string 1.3
Date.prototype.toString() : string 1 1.3 5.1.5010 525.13 5.02 3.5.9
Date.prototype.toTimeString() : string 3 1.5 5.5.6330 525.13 5.02 3.5.9
Date.prototype.toUTCString() : string 1 1.3 5.1.5010 525.13 5.02 3.5.9
@debug N/A 7.0
debugger 5 [12.15] N/A 3.0
decimal N/A 7.0
decodeURI(String) : string 3 N/A 1.5 5.5
decodeURIComponent(String) : string N/A 1.5 5.5
delete N/A 3.0
do…while N/A 3.0
double 4 N/A 2.0 7.0
encodeURI(String) N/A 1.5 5.5
encodeURIComponent(String) : string N/A 1.5 5.5
enum N/A 2.0 7.0
Enumerator() N/A 3.0
Error([message : String]) N/A 5.0
Error.prototype.description : string N/A 5.0
Error.prototype.message : string N/A 5.5
Error.prototype.name : string N/A 5.5
Error.prototype.number : number|int N/A 5.0
Error.prototype.stack : string N/A 1.5
expando N/A 7.0
final N/A 7.0
float 4 N/A 2.0 7.0
for each ([var] identifier in Object) E4X N/A 1.6
Function([p1 : String[, p2 : String[, ], pn : String],] body : String) : Function 1 N/A 1.1 2.0
function get identifier() : Function N/A 7.0
function set identifier() : Function N/A 7.0
= function identifier() {} : Function 1 1.3 5.1.5010 525.13 5.02 3.5.9
= function() {} : Function 3 1.3 3.1.3510 525.13 5.02 3.5.9
= function() expression : Function N/A 1.8
if () { function f() { }; } 1.3 3.1.3510 525.13 5.02 3.5.9
Function.prototype : Function 1 5.1.5010 5.02
Function.prototype.arity : number|int N/A 1.2[12]
Function.prototype.apply([thisArg : Object|undefined[, argArray : Array|arguments]]) 3 N/A 1.3 5.5.6330
Function.prototype.arguments : arguments N/A 1.0[13] 2.0
Function.prototype.arguments.callee : Function N/A 1.2[14] 5.6
Function.prototype.arguments.length : number|int N/A 1.0[15]
Function.prototype.call([thisArg : Object|undefined[, arg1[, arg2, ]]) 3 N/A 1.3 5.5.6330
Function.prototype.caller : Function|null 1.0 2.0
Function.prototype.length : number|int N/A 2.0
Function.prototype.prototype : Object 1.8.2[16] [17] [18] [19] [20]
Function.prototype.toSource() : string N/A 1.3
Generator.close()[V] N/A 1.7
Generator.next()[V] N/A 1.7
Generator.send(expression)[V] N/A 1.7
Generator.throw(expression)[V] N/A 1.7
GetObject() N/A 3.0
Global object 1 N/A 1.0 3.0
hide N/A 7.0
@if N/A 3.0
import N/A 7.0
(String in Object) : boolean 3 N/A 1.4 5.0
Infinity : number 1 1.3 5.1.5010 525.13 5.02
instanceof 3 N/A 1.4 5.0
int 4 N/A 2.0 7.0
interface 4 N/A 2.0 7.0
internal 4 N/A 2.0 7.0
isFinite() : boolean N/A 3.0
Iterator(Object) : Iterator N/A 1.7
JSON.parse(text : String[,reviver : Function]) : Object 5 1.8.1
JSON.stringify(value[, replacer[, space]]) : string 5 1.8.1
let (assignment[, ]) { [statements] }[V] N/A 1.7
let (assignment[, ]expression[V] N/A 1.7
let assignment[, ][V] N/A
long 4 N/A 2.0 7.0
Math.max(a : Number, b : Number) : number 1 1.3 3.1.3510 525.13 5.02 3.5.9
Math.max(a : Number, b : Number, ) : number 3 1.5 5.5.6330 525.13 5.02 3.5.9
Math.min(a : Number, b : Number) : number 1 N/A 1.3 3.1.3510
Math.min(a : Number, b : Number, ) : number 3 N/A 1.5 5.5.6330
NaN : number 1 1.3 5.1.5010 525.13 5.02
Number([expression]) : number N/A 1.0
Number.MAX_VALUE : number N/A 2.0
Number.MIN_VALUE : number N/A 2.0
Number.NaN : number 5.1.5010 5.02
Number.NEGATIVE_INFINITY : number N/A 2.0
Number.POSITIVE_INFINITY : number N/A 2.0
Number.prototype : Number 1 1.1 5.1.5010 2.0 5.02
Number.prototype.toString() : string 1 1.2 5.1.5010 525.13 5.02
Object([expression]) : Object N/A 3.0
Object.getOwnPropertyNames(o : Object) : Array 5 [15.2.3.4] 2.1
Object.getPrototypeOf(o : Object) : Object 5 [15.2.3.2] 1.8.1 2.0.6
Object.prototype : Object 1 5.1.5010 5.02
Object.prototype.__defineGetter__(propertyName: string, getter: Function) N/A 1.5
Object.prototype.__defineSetter__(propertyName: string, setter: Function) N/A 1.5
Object.prototype.__iterator__ N/A 1.7
Object.prototype.__proto__ 1.3 2.0
Object.prototype.constructor : Function 1 N/A 1.1 2.0
Object.prototype.hasOwnProperty(propertyName : String) : boolean 3 N/A 1.5 5.5.6330 525.13 3.5.9
Object.prototype.isPrototypeOf(Object) : boolean 3 [15.2.4.6] 1.5 5.5 525.13 5.02 4.3.4
Object.prototype.propertyIsEnumerable(propertyName : String) : boolean N/A 5.5
Object.prototype.toSource() : string N/A 1.0
override N/A 7.0
package N/A 7.0
@position N/A 7.0
print(string) N/A 7.0
private N/A 7.0
protected N/A 7.0
public N/A 7.0
RegExp([, "[g][i]"]) : RegExp N/A 1.2
RegExp([, "[g][i][m]"]) : RegExp 3 N/A 1.5 3.0
RegExp.$integer N/A 3.0
RegExp.{$& | lastMatch} N/A 1.2 5.5
RegExp.{$' | rightContext} N/A 5.5
RegExp.{$+ | lastParen} N/A 5.5
{RegExp | reArray}.{$_ | input} N/A 1.2 3.0
RegExp.{$` | leftContext} N/A 5.5
{RegExp | reArray}.index N/A 3.0
RegExp.prototype.compile() N/A 3.0
RegExp.prototype.exec() N/A 3.0
RegExp.prototype.global 3 N/A 1.2 5.5
RegExp.prototype.ignoreCase 3 N/A 1.2 5.5
RegExp.prototype.multiline 3 N/A 1.2 5.5
RegExp.prototype.source N/A 3.0
sbyte N/A 7.0
ScriptEngine() N/A 2.0
ScriptEngineBuildVersion() N/A 2.0
ScriptEngineMajorVersion() N/A 2.0
ScriptEngineMinorVersion() N/A 2.0
@set N/A 3.0
short N/A 7.0
Strict Not Equal/Nonidentity operator N/A
String.prototype 1 5.1.5010 5.02
String.fromCharCode(Number|uint) 1 1.3 5.1.5010 525.13 6.06 4.3.2
String.prototype.charCodeAt(Number|uint) 1[G] 1.3 5.1.5010 525.13 5.02 4.3.2
String.prototype.concat() N/A 3.0
String.prototype.localeCompare(string) 3[G] 1.8.1 5.5.6330 525.13 7.02 4.3.2
String.prototype.match(RegExp) 3 N/A 1.3 3.0
String.prototype.replace(string|RegExp, string) 3 N/A 1.2 1.0
String.prototype.replace(string|RegExp, Function) 3 N/A 1.3 5.5.6330
String.prototype.search(RegExp) N/A 3.0
String.prototype.slice() N/A 1.0 3.0
String.prototype.split() 1 N/A 1.1 3.0
String.prototype.substr(start[, length]) 3 [B.2.3] 1.2 [21] 2.1 530.17 5.02 4.3.4
String.prototype.trim() 5 1.8.1
string[Number|uint] 1.3 525.13 4.3.2
switch (expression) { case valuestatements[break;] default: statements[break;] } 3 N/A 1.2 3.0
throw expression 3 N/A 1.4 5.1.5010
try { [statements}
catch (identifier) { 
[statements}
3 N/A 1.4 5.1.5010
try { [statements] }
finally { 
[statements] }
3 N/A 1.4
try { [statements] }
catch (identifier) { 
[statements] }
finally { 
[statements] }
3 N/A 1.4 5.0
try { [statements] }
catch (identifier if expression) { 
[statements}
[catch (identifier) { [statements] }]
[finally { [statements] }]
N/A 1.5
typeof expression 1 N/A 1.1 1.0
undefined 1 N/A 1.3 5.5
VBArray.prototype.dimensions() N/A 3.0
VBArray.prototype.getItem() N/A 3.0
VBArray.prototype.lbound() N/A 3.0
window N/A 1.0[22]
window.setInterval(string, msec) N/A 1.2[23]
window.setInterval(functionReference, msec[, arg1[, , argN]]) N/A 1.2[23]
window.setTimeout(string, msec) N/A 1.0[24]
window.setTimeout(functionReference, msec[, arg1[, , argN]]) N/A 1.2
yield expression[V] N/A 1.7
G This method is intentionally specified or implemented as generic; it does not require that its this value be an object of the same type. Therefore, it can be transferred to other kinds of objects for use as a method.
V Version needs to be declared in order to use this feature
1
  • This user agent:
  • This ECMAScript implementation
2 Opera 5.02 to 7.02 read escaped newline
3 deprecated since 1.4 for comparison of two JSObject objects; use the JSObject.equals method instead
4 5.02 and 6.06 show length 2, should be 1
5 deprecated since 1.3
6 see Function.prototype.caller
7 Opera 6.06 does not support negative values for start
8 1.1: Does not work on some platforms; converts undefined elements to null
9 1.2: Sorts undefined elements to the end of the array
10 1.8: Stable sort
11 since 1.3: returns an array containing the removed elements
12 deprecated since 1.4
13 deprecated since 1.4; use arguments instead
14 deprecated since 1.4; use arguments.callee instead
15 deprecated since 1.4; use arguments.length instead
16 tested in 1.8.2 only
17 tested in 5.0 and 6.0 only, 8.x and 9.x Preview contributed by LRN
18 Chrome dev contributed by LRN
19 Safari 4.0.5 contributed by LRN
20 9.52 contributed by LRN
21 Does not support negative values
22 removed in 1.4; Gecko DOM feature since 1.5
23 removed in 1.4; Gecko DOM feature since 1.5
24 removed in 1.4; Gecko DOM feature since 1.5

Version Information

↑ table of contents

Netscape/Mozilla.org JavaScript Version Information1)

↑ table of contents
JavaScript 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.8.1 1.8.2 2.0
1) Version information from the JavaScript Guides and References; release dates from about: documents, mozilla.org and Wikipedia.
Implementations
Netscape/Mozilla.org SpiderMonkey 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.8.1 1.8.2 -
Mozilla.org Epimetheus +
Netscape/Mozilla.org Rhino 1.4R3 (1999-05) 1.5R11.5R5 (2000–2004) 1.6R11.6R7 (2004–2007) 1.7R11.7R2— (2008-03 – 2009-03—)
Layout Engines
Netscape/Mozilla.org NGLayout/Gecko 0.6–1.8a6 1.8b1–1.8 1.8.1 1.9 1.9.1 1.9.2
Web Browsers
Netscape Navigator/Browser  Navigator 2.0  (1996-03) 3.0  (1996-08) 4.0–4.05  (1997-06) 4.06–4.8  (1998–2002) - Navigator 6.x – Browser 8.1.3  (2000–2007) - Navigator 9.0b1 – 9.0.0.6 
(2007–2008)
Mozilla Phoenix/Firebird/Firefox Phoenix 0.1 – Firefox 1.0.8 
(2002–2006)
Firefox 1.5a1–1.5.0.12 
(2005–2007)
2.0b1–2.0.0.18 
(2006–2008)
3.0a2–3.0.19 
(2007-02-07 – 2010-03-30)
3.1a1–3.5.9—
(2008-07-28 — 2010-03-30)
3.6a1—3.6.3—
(2010-01-21 – 2010-04-01—)
Other Clients
Mozilla Application Suite  0.6–1.8a6  (2000–2005) 1.8b1–1.7.13 
(2005–2006)
Mozilla SeaMonkey 1.0–1.0.9  (2005–2007) 1.1a–1.1.19 
(2006-08-30 – 2010-03-10)
2.0a1
(2008-10-05)
2.0a2–2.0.4—
(2008-12-10 – 2010-03-30—)
Mozilla Thunderbird 2.0a1–2.0.0.24— (2006-07-28 – 2010-03-15—) 3.0a1–3.0.4— (2008-03-13 – 2010-03-30—)
Web Servers
Netscape Enterprise Server/
iPlanet Web Server/
Sun ONE Web Server/
Sun Java System Web Server
2.0 3.0 4.0/4.1 (1999) 6.0 ? ? ? ? ? ?

Microsoft JScript Version Information2)

↑ table of contents
JScript 1.0 2.0 3.0 3.1.3510 4.0 5.0 5.1.5010 5.5.6330 5.6.6626 – 5.6.8819 5.7.5730 5.7.17184 5.8.18241 7.0 (.NET) 7.1 (.NET) 8.0 10.0
2) Version information from MSDN Library; release dates from MSDN Library, blooberry.com and Wikipedia, end-of-life (†) dates from support.microsoft.com.
Note that the language version supported by an environment may be greater than specified here due to security updates. When in doubt, use the script engine test above to determine the true version.
Implementations
Microsoft .NET Framework 1.0 (2002-01) 1.1 (2003) 2.0–3.5 SP1 (2005–2008) 4.0— (2010-04-12—)
Web Browsers
Microsoft Internet Explorer 3.0 
(1996-08 CE)
4.0
(1997-09)
4.01 5.0 
(1999-03 – 2005-06)
5.01 5.5 
(2000-07 – 2005-12)
6.0 for Win9x/NT/XP
(2001-10)
7.0 for WinXP+
(2006-10)
8.0 beta 1 for WinXP SP2+
(2008-03)
8.0 beta 2 for WinXP SP2+
(2008-08)
Web Servers
Microsoft Internet Information Server/Services 4.0 
(1998–2002)
5.1–6.0 
(2000–2005)
Operating Systems
Microsoft Windows NT 4.0 
(1996)
2000 
(2000-02 – 2005-06)
Me 
(2000-09 – 2005-12)
XP
(2001-10)
Vista
(2008-03)
7
(2009-10)
Microsoft Windows Server 2003
(2003-04)
IDEs
Microsoft Visual Studio 6.0 
(1998–2005)
.NET 7.0
(2002)
.NET 7.1
(2003)
8.0–9.0
(2005–2008)
10.0—
(2010-04-12—)

Google V8 Version Information

↑ table of contents
V8 0.3 0.4 1.2 1.3 2.0 2.1
Google Chrome 0.2–1.0
(2008-09 CE—2008-12)
2.0
(2009-05)
3.0
(2009-10)
4.0.249
(2010-01-25)
5.0.307
(2010-01-30)
5.0.342

Apple JavaScriptCore Version Information

↑ table of contents
JavaScriptCore 48–312.6 412–419.13 522.11–523.10 525.13 525.19 525.27.1 530.17 531.9 531.21.8
Apple Safari 0.8–1.3.2 
(2003–2006 CE)
2.0–2.0.4
(2005-04 – 2006-01)
3.0–3.0.4
(2007-06 – 2007-10)
3.1
(2008-03)
3.1.2
(2008-06)
3.2.1
(2008-11)
4.0
(2009-06)
4.0.3
(2009-08)
4.0.4
(2009-11)

Opera ECMAScript Version Information

↑ table of contents
Opera ECMAScript 3.60 5.02 6.06 7.02 8.0 9.27 9.52 9.62 9.64 10.10 10.51
Opera Browser 3.60 
(1995?)
5.02  6.06 7.02
(2003–2005)
8.0
(2005–2008)
9.27
(2008)
9.52
(2008)
9.62
(2008–2009)
9.64
(2009)
10.10
(2009–2010)
10.51
(2010)

Macromedia/Adobe ActionScript Versions3)

ActionScript 1.0 2.0
3) Version information from Macromedia
Macromedia Flash 5.0–MX (2000–2003) 7.1.1 (MX 2004)— (2004—)

ECMAScript Compatibility

↑ table of contents

The following table provides a rough overview of ECMAScript Editions and relations between them and versions of their implementations. Note that conforming implementations are allowed to extend ECMAScript, so these are by no means 1:n relations; instead, this is the result of a comparison of most common language features.

See Language Features above for details.

ECMAScript Edition 1 2 3 4
(Working Draft; abandoned)
5 6
("Harmony", Working Draft)
June 1997 August 1998 December 1999 – March 2000 August 2000 – June 2003 – 2008 April 2009 – December 2009 April 2009—
ActionScript 2.0 (2004) 3.0 (2008—)
JavaScript 1.1, 1.3, 1.4 1.5–1.8.1.x 2.0 1.8.1— (2008-05—)
JavaScriptCore
JScript 1.0 (1996) 5.5— (2000—) 7.0— (2000—)
KJS 1.0 -
Opera 6.0 (2001-12)
V8 0.3
ECMAScript for XML (E4X)
June 2004
ActionScript 2.0
JavaScript 1.6+
JavaScriptCore -
JScript -
KJS -
Opera -
V8 -

List of Contributors

↑ table of contents

Thanks to:

Valid HTML 4.01

built with
eclipse