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.