JavaScript引擎比较

下表比较在网页浏览器内使用一些知名JavaScript引擎对标准的支持。

## 表格解说

完整列表可参见ECMAScript引擎列表。

### 值

这些值指示了在每个引擎中对给定项目的支持程度。缺省的，默认为这个引擎的最新版本。但是，可以列出特定版本号；当这指示完全支持的时候，它是这个引擎完全支持这个项目的最初版本。

值｜含义

是｜完全支持

否｜从未支持

部分｜只支持某些值

在所有情况下未正确实现可能不完全或有缺陷目前正在开发；可预期完全支持

视情况｜只在特定条件下支持

不再支持

## ECMAScript版本支持

下表中的版本号为排版引擎的版本号。JavaScript的版本号就是JavaScript引擎中SpiderMonkey的版本号，在ECMAScript Edition 5之后不再延续跟进。

Trident｜Gecko｜WebKit｜Presto｜Blink

ECMAScript引擎名称｜JScriptChakra｜SpiderMonkeyTraceMonkeyJägerMonkeyIonMonkey｜JavaScriptCoreSquirrelFish Extreme｜Linear BFutharkCarakan｜V8

ECMAScript Edition 3等价于JavaScript 1.5｜是｜1.7｜是｜1.0｜是

JavaScript 1.6 扩展(排除E4X)｜否｜1.8｜部分｜部分｜部分

JavaScript 1.7 扩展｜否｜1.8.1｜否｜部分｜否

JavaScript 1.8 扩展｜否｜1.9｜部分｜否｜部分

JavaScript 1.8.1 扩展｜否｜1.9.1｜否｜否｜否

ECMAScript Edition 5等价于JavaScript 1.8.5｜7.0｜2.0｜部分｜是｜是

E4X｜否｜废弃于17｜否｜否｜否

ECMAScript Edition 6又称ECMAScript 2015｜部分｜部分｜部分

ECMAScript 2016扩展｜是｜是｜是

ES新近版本2016+扩展｜部分｜部分｜是

## 标准库

### 全局对象

Trident｜Gecko｜WebKit｜Presto｜Blink

值属性

`NaN`｜4.0｜0.6｜是｜是｜是

`Infinity`｜4.0｜0.6｜是｜是｜是

`undefined`｜5.5｜0.6｜是｜是｜是

函数属性

`eval(x)`｜3.0｜0.6｜是｜是｜是

`parseInt(string [, radix])`｜3.0｜0.6｜是｜是｜是

`parseFloat(string)`｜3.0｜0.6｜是｜是｜是

`isNaN(number)`｜4.0｜0.6｜是｜是｜是

`isFinite(number)`｜4.0｜0.6｜是｜是｜是

URI处理函数

`decodeURI(encodedURI)`｜5.5｜0.6｜是｜是｜是

`decodeURIComponent(encodedURIComponent)`｜5.5｜0.6｜是｜是｜是

`encodeURI(uri)`｜5.5｜0.6｜是｜是｜是

`encodeURIComponent(uriComponent)`｜5.5｜0.6｜是｜是｜是

constructor属性

`Object`｜4.0｜是｜是｜是｜是

`Function`｜4.0｜是｜是｜是｜是

`Array`｜4.0｜是｜是｜是｜是

`String`｜3.0｜是｜是｜是｜是

`Boolean`｜3.0｜是｜是｜是｜是

`Number`｜3.0｜是｜是｜是｜是

`Date`｜3.0｜是｜是｜是｜是

`RegExp`｜4.0｜是｜是｜是｜是

`Error`｜5.0｜是｜是｜是｜是

`EvalError`｜5.0｜是｜是｜是｜是

`RangeError`｜5.0｜是｜是｜是｜是

`ReferenceError`｜5.0｜是｜是｜是｜是

`SyntaxError`｜5.0｜是｜是｜是｜是

`TypeError`｜5.0｜是｜是｜是｜是

`URIError`｜5.0｜是｜是｜是｜是

其他属性

`Math`｜3.0｜是｜是｜是｜是

额外属性

`escape(string)`｜3.0｜是｜是｜是｜是

`unescape(string)`｜3.0｜是｜是｜是｜是

### Object对象

Trident｜Gecko｜WebKit｜Presto｜Blink

调用为函数

`Object([value])`｜是｜是｜是｜是｜是

调用为constructor

`new Object([value])`｜4.0｜是｜是｜是｜是

属性

`prototype`｜4.0｜是｜是｜是｜是

prototype的属性

`constructor`｜4.0｜是｜是｜是｜是

`toString()`｜4.0｜是｜是｜是｜是

`toLocaleString()`｜4.0｜是｜是｜是｜是

`valueOf()`｜4.0｜是｜是｜是｜是

`hasOwnProperty(V)`｜5.5｜是｜3｜是｜是

`isPrototypeOf(V)`｜5.5｜是｜3｜是｜是

`propertyIsEnumerable(V)`｜5.5｜是｜3｜是｜是

### Function对象

Trident｜Gecko｜WebKit｜Presto｜Blink

调用为函数

`Function(p1 , p2 , ..., body)`｜?｜是｜是｜?｜是

调用为constructor

`new Function(p1 , p2 , ..., body)`｜4.0｜1.0｜是｜1.0｜是

属性

`length`｜?｜1.0｜是｜是｜是

`prototype`｜4.0｜1.0｜是｜1.0｜是

prototype的属性

`length`｜?｜1.0｜是｜?｜是

`constructor`｜4.0｜1.0｜是｜1.0｜是

`toString()`｜4.0｜1.0｜是｜1.0｜是

`apply(thisArg, argArray)`｜4.0｜1.0｜是｜1.0｜是

`call(thisArg [, arg1 [, arg2 [, ...]]])`｜4.0｜1.0｜是｜1.0｜是

实例的属性

`length`｜4.0｜1.0｜是｜1.0｜是

`prototype`｜4.0｜1.0｜是｜1.0｜是

### Array对象

Trident｜Gecko｜WebKit｜Presto｜Blink

调用为函数

`Array([item1 [, item2 [, ...]]])`｜是｜是｜是｜是｜是

调用为constructor

`new Array([item1, item2 [, ...]])`｜4.0｜1.0｜是｜1.0｜是

`new Array(len)`｜4.0｜1.0｜是｜1.0｜是

属性

`prototype`｜4.0｜1.0｜是｜1.0｜是

prototype的属性

`constructor`｜4.0｜1.0｜是｜1.0｜是

`toString()`｜4.0｜1.0｜是｜1.0｜是

`toLocaleString()`｜5.5｜1.0｜是｜1.0｜是

`concat([item1 [, item2 [,...]]])`｜4.0｜1.0｜是｜1.0｜是

`join(separator)`｜4.0｜1.0｜是｜1.0｜是

`pop()`｜5.5｜1.0｜是｜1.0｜是

`push([item1 [, item2 [,...]]])`｜5.5｜1.0｜是｜1.0｜是

`reverse()`｜4.0｜1.0｜是｜1.0｜是

`shift()`｜5.5｜1.0｜是｜1.0｜是

`slice(start, end)`｜4.0｜1.0｜是｜1.0｜是

`sort(comparefn)`｜4.0｜1.0｜是｜1.0｜是

`splice(start, deleteCount [, item1 [, item2 [, ...]]])`｜5.5｜1.0｜是｜1.0｜是

`unshift([item1 [, item2 [, ...]]])`｜5.5｜1.0｜是｜1.0｜是

`indexOf(searchElement[, fromIndex])`｜1.8｜522｜2.1｜是

`lastIndexOf(searchElement[, fromIndex])`｜1.8｜522｜2.1｜是

`filter(callback[, thisObject])`｜1.8｜522｜2.1｜是

`forEach(callback[, thisObject])`｜1.8｜522｜2.1｜是

`every(callback[, thisObject])`｜1.8｜522｜2.1｜是

`map(callback[, thisObject])`｜1.8｜522｜2.1｜是

`some(callback[, thisObject])`｜1.8｜522｜2.1｜是

`reduce(callback[, initialValue])`｜1.9｜528｜2.5.22｜是

`reduceRight(callback[, initialValue])`｜1.9｜528｜2.5.22｜是

实例的属性

`length`｜4.0｜1.0｜是｜1.0｜是

### String对象

Trident｜Gecko｜WebKit｜Presto｜Blink

调用为函数

`String([value])`｜是｜是｜是｜是｜是

调用为constructor

`new String([value])`｜3.0｜1.0｜是｜1.0｜是

属性

`prototype`｜4.0｜1.0｜是｜1.0｜是

`fromCharCode([char0 [, char1 [, ...]]])`｜4.0｜1.0｜是｜1.0｜是

prototype的属性

`constructor`｜4.0｜1.0｜是｜1.0｜是

`toString()`｜3.0｜1.0｜是｜1.0｜是

`valueOf()`｜3.0｜1.0｜是｜1.0｜是

`charAt(pos)`｜3.0｜1.0｜是｜1.0｜是

`charCodeAt(pos)`｜5.5｜1.0｜是｜1.0｜是

`concat([string1 [, string2 [, ...]]])`｜4.0｜1.0｜是｜1.0｜是

`indexOf(searchString, position)`｜3.0｜1.0｜是｜1.0｜是

`lastIndexOf(searchString, position)`｜3.0｜1.0｜是｜1.0｜是

`localeCompare(that)`｜5.5｜1.0｜是｜1.0｜是

`match(regexp)`｜4.0｜1.0｜是｜1.0｜是

`replace(searchValue, replaceValue)`｜3.0｜1.0｜是｜1.0｜是

`search(regexp)`｜4.0｜1.0｜是｜1.0｜是

`slice(start, end)`｜4.0｜1.0｜是｜1.0｜是

`split(separator, limit)`｜4.0｜1.0｜是｜1.0｜是

`substring(start, end)`｜3.0｜1.0｜是｜1.0｜是

`toLowerCase()`｜3.0｜1.0｜是｜1.0｜是

`toLocaleLowerCase(comparefn)`｜3.0｜1.0｜是｜1.0｜是

`toUpperCase()`｜3.0｜1.0｜是｜1.0｜是

`toLocaleUpperCase()`｜3.0｜1.0｜是｜1.0｜是

prototype的额外属性

`substr(start, length)`｜4.0｜1.0｜是｜1.0｜是

实例的属性

`length`｜3.0｜1.0｜是｜1.0｜是

### Boolean对象

Trident｜Gecko｜WebKit｜Presto｜Blink

调用为函数

`Boolean([value])`｜是｜是｜是｜是｜是

调用为constructor

`new Boolean([value])`｜3.0｜是｜是｜是｜是

属性

`prototype`｜4.0｜是｜是｜是｜是

prototype的属性

`constructor`｜4.0｜是｜是｜是｜是

`toString()`｜4.0｜是｜是｜是｜是

`valueOf()`｜4.0｜是｜是｜是｜是

### Number对象

Trident｜Gecko｜WebKit｜Presto

调用为函数

`Number([value])`｜?｜是｜是｜?

调用为constructor

`new Number([value])`｜3.0｜1.0｜是｜1.0

属性

`prototype`｜4.0｜1.0｜是｜1.0

`MAX_VALUE`｜4.0｜1.0｜是｜1.0

`MIN_VALUE`｜4.0｜1.0｜是｜1.0

`NaN`｜4.0｜1.0｜是｜1.0

`NEGATIVE_INFINITY`｜4.0｜1.0｜是｜1.0

`POSITIVE_INFINITY`｜4.0｜1.0｜是｜1.0

prototype的属性

`constructor`｜4.0｜1.0｜是｜1.0

`toString([radix])`｜4.0｜1.0｜是｜1.0

`toLocaleString()`｜5.5｜1.0｜是｜1.0

`valueOf()`｜4.0｜1.0｜是｜1.0

`toFixed(fractionDigits)`｜5.5｜1.0｜是｜1.0

`toExponential(fractionDigits)`｜5.5｜1.0｜是｜1.0

`toPrecision(precision)`｜5.5｜1.0｜是｜1.0

### Math对象

Trident｜Gecko｜WebKit｜Presto

值属性

`E`｜3.0｜1.0｜是｜1.0

`LN10`｜3.0｜1.0｜是｜1.0

`LN2`｜3.0｜1.0｜是｜1.0

`LOG2E`｜3.0｜1.0｜是｜1.0

`LOG10E`｜3.0｜1.0｜是｜1.0

`PI`｜是｜是｜是｜是

`SQRT1_2`｜3.0｜1.0｜是｜1.0

`SQRT2`｜是｜是｜是｜是

函数属性

`abs(x)`｜3.0｜1.0｜是｜1.0

`acos(x)`｜3.0｜1.0｜是｜1.0

`asin(x)`｜3.0｜1.0｜是｜1.0

`atan(x)`｜3.0｜1.0｜是｜1.0

`atan2(y, x)`｜3.0｜1.0｜是｜1.0

`ceil(x)`｜3.0｜1.0｜是｜1.0

`cos(x)`｜3.0｜1.0｜是｜1.0

`exp(x)`｜3.0｜1.0｜是｜1.0

`floor(x)`｜3.0｜1.0｜是｜1.0

`log(x)`｜3.0｜1.0｜是｜1.0

`max([value1 [, value2 [, ...]]])`｜3.0｜1.0｜是｜1.0

`min([value1 [, value2 [, ...]]])`｜3.0｜1.0｜是｜1.0

`pow(x, y)`｜3.0｜1.0｜是｜1.0

`random()`｜3.0｜1.0｜是｜1.0

`round(x)`｜3.0｜1.0｜是｜1.0

`sin(x)`｜3.0｜1.0｜是｜1.0

`sqrt(x)`｜3.0｜1.0｜是｜1.0

`tan(x)`｜3.0｜1.0｜是｜1.0

### Date对象

Trident｜Gecko｜WebKit｜Presto

调用为函数

`Date ([year [, month [, date [, hours [, minutes [, seconds [, ms ]]]]]]])`｜?｜?｜?｜?

调用为constructor

`new Date (year, month [, date [, hours [, minutes [, seconds [, ms ]]]]])`｜4.0｜1.0｜是｜1.0

`new Date (value)`｜4.0｜1.0｜是｜1.0

`new Date ()`｜4.0｜1.0｜是｜1.0

属性

`prototype`｜4.0｜1.0｜是｜1.0

`parse(string)`｜3.0｜1.0｜是｜1.0

`UTC (year, month [, date [, hours [, minutes [, seconds [, ms ]]]]])`｜3.0｜1.0｜是｜1.0

prototype的属性

`constructor`｜4.0｜1.0｜是｜1.0

`toString()`｜4.0｜1.0｜是｜1.0

`toDateString()`｜4.0｜1.0｜是｜1.0

`toTimeString()`｜4.0｜1.0｜是｜1.0

`toLocaleString()`｜4.0｜1.0｜是｜1.0

`toLocaleDateString()`｜4.0｜1.0｜是｜1.0

`toLocaleTimeString()`｜4.0｜1.0｜是｜1.0

`valueOf()`｜4.0｜1.0｜是｜1.0

`getTime()`｜3.0｜1.0｜是｜1.0

`getFullYear()`｜4.0｜1.0｜是｜1.0

`getMonth()`｜3.0｜1.0｜是｜1.0

`getUTCMonth()`｜4.0｜1.0｜是｜1.0

`getDate()`｜3.0｜1.0｜是｜1.0

`getUTCDate()`｜4.0｜1.0｜是｜1.0

`getDay()`｜3.0｜1.0｜是｜1.0

`getUTCDay()`｜4.0｜1.0｜是｜1.0

`getHours()`｜3.0｜1.0｜是｜1.0

`getUTCHours()`｜4.0｜1.0｜是｜1.0

`getMinutes()`｜3.0｜1.0｜是｜1.0

`getUTCMinutes()`｜4.0｜1.0｜是｜1.0

`getSeconds()`｜3.0｜1.0｜是｜1.0

`getUTCSeconds()`｜4.0｜1.0｜是｜1.0

`getMilliseconds()`｜4.0｜1.0｜是｜1.0

`getUTCMilliseconds()`｜4.0｜1.0｜是｜1.0

`getTimezoneOffset()`｜4.0｜1.0｜是｜1.0

`setTime(time)`｜3.0｜1.0｜是｜1.0

`setMilliseconds(ms)`｜4.0｜1.0｜是｜1.0

`setUTCMilliseconds(ms)`｜4.0｜1.0｜是｜1.0

`setSeconds(sec [, ms])`｜3.0｜1.0｜是｜1.0

`setUTCSeconds(sec [, ms])`｜4.0｜1.0｜是｜1.0

`setMinutes(min [, sec [, ms]])`｜3.0｜1.0｜是｜1.0

`setUTCMinutes(min [, sec [, ms]])`｜4.0｜1.0｜是｜1.0

`setHours(hour [, min [, sec [, ms]]])`｜4.0｜1.0｜是｜1.0

`setUTCHours(hour [, min [, sec [, ms]]])`｜4.0｜1.0｜是｜1.0

`setDate(date)`｜4.0｜1.0｜是｜1.0

`setUTCDate(date)`｜4.0｜1.0｜是｜1.0

`setMonth(month [, date])`｜3.0｜1.0｜是｜1.0

`setUTCMonth(month [, date])`｜4.0｜1.0｜是｜1.0

`setFullYear(year [, month [, date]])`｜4.0｜1.0｜是｜1.0

`setUTCFullYear(year [, month [, date]])`｜4.0｜1.0｜是｜1.0

`toUTCString()`｜4.0｜1.0｜是｜1.0

prototype的额外属性

`getYear()`｜3.0｜1.0｜是｜1.0

`setYear(year)`｜3.0｜1.0｜是｜1.0

`toGMTString()`｜4.0｜1.0｜是｜1.0

### RegExp对象

Trident｜Gecko｜WebKit｜Presto

调用为函数

`RegExp (pattern, flags)`｜?｜?｜?｜?

调用为constructor

`new RegExp (pattern, flags)`｜4.0｜1.0｜是｜1.0

属性

`prototype`｜4.0｜1.0｜是｜1.0

prototype的属性

`constructor`｜4.0｜1.0｜是｜1.0

`exec(string)`｜4.0｜1.0｜是｜1.0

`test(string)`｜4.0｜1.0｜是｜1.0

`toString()`｜4.0｜1.0｜是｜1.0

实例的属性

`source`｜4.0｜1.0｜是｜1.0

`global`｜4.0｜1.0｜是｜1.0

`ignoreCase`｜5.5｜1.0｜是｜1.0

`multiline`｜5.5｜1.0｜是｜1.0

`lastIndex`｜4.0｜1.0｜是｜1.0

### Error对象

Trident｜Gecko｜WebKit｜Presto

调用为函数

`Error (message)`｜?｜?｜?｜?

调用为constructor

`new Error (message)`｜5.0｜1.0｜是｜1.0

属性

`prototype`｜5.0｜1.0｜是｜1.0

prototype的属性

`constructor`｜5.0｜1.0｜是｜1.0

`name`｜5.5｜1.0｜是｜1.0

`message`｜5.5｜1.0｜是｜1.0

`toString()`｜5.0｜1.0｜是｜1.0

### NativeError对象

Trident｜Gecko｜WebKit｜Presto

调用为函数

`EvalError (message)`｜?｜1.0｜是｜?

`RangeError (message)`｜?｜1.0｜是｜?

`ReferenceError (message)`｜?｜1.0｜是｜?

`SyntaxError (message)`｜?｜1.0｜是｜?

`TypeError (message)`｜?｜1.0｜是｜?

`URIError (message)`｜?｜1.0｜是｜?

调用为constructor

`new EvalError (message)`｜?｜1.0｜是｜?

`new RangeError (message)`｜?｜1.0｜是｜?

`new ReferenceError (message)`｜?｜1.0｜是｜?

`new SyntaxError (message)`｜?｜1.0｜是｜?

`new TypeError (message)`｜?｜1.0｜是｜?

`new URIError (message)`｜?｜1.0｜是｜?

属性

`prototype`｜?｜1.0｜?｜?

prototype的属性

`constructor`｜?｜1.0｜?｜?

`name`｜?｜1.0｜是｜?

`message`｜?｜1.0｜是｜?

## 延伸阅读

- ECMAScript object support in Opera
- JavaScript tests & Compatibility tables
- ECMAScript 6 compatibility table

## 外部链接

- Webdevout – mostly covers Windows browsers. Extensive bug testing.