所以ECMAScript的5引入一些不兼容與ECMAScript的3.如何確保ES3程序在ES5引擎中運行?
例:
Manyarticles已被寫入,說明this === null || this === undefined
能夠在ES5嚴格模式:
"use strict";
(function() {
alert(this); // null
}).call(null);
但是,什麼the standard真的建議是,ES5引擎還允許這種在非嚴格模式:
15.3.4.3 ... 的thisArg值原封不動地作爲
this
值傳遞。這是從版本3發生的變化,其中undefined
或null
thisArg替換爲全局對象,ToObject應用於所有其他值,並且該結果作爲this
值傳遞。
目前,IE9是真正實現ES5這種方式唯一的瀏覽器,而且事實證明,這可能break current scripts。大。
Annix E ES5 spec列出了許多其他不兼容性。
那麼確保我們久經考驗的ES3腳本能夠繼續無縫運行的最佳方式是什麼?某種自動化測試套件?我們需要手動測試嗎?
你的測試套件是非常好的東西。但是,恐怕這對我的特殊情況無濟於事。基本上,我的公司需要確保我們的舊腳本不會在客戶的安裝中造成任何問題。我們在這裏討論數百和數百個腳本,手動檢查每一個功能看起來都很痛苦。 (「單元測試?那是什麼?」)目前,恐怕我們只是在等待錯誤報告。 – user123444555621 2010-10-23 07:41:42
如何通過JSLint運行腳本?一個接一個,一點一點地。JSLint可能不會涵蓋所有對compat敏感的更改,但它肯定會讓你接近。它會警告parseInt w/o radix,以及關於屬性名稱的關鍵字(例如'({if:1})')等等。 – kangax 2010-10-23 20:08:34
不幸的是,即使腳本在ES3中運行良好,JSLint也會報告數千個錯誤,偶爾會拒絕繼續(例如,當遇到'void'時)。事實上,過去我已經制作了一些JSLint模組,我也在考慮添加一些ES5的東西。但是,一些不兼容性(7.8.5/1,10.4.2,10.6/2,15.3.4.3,15.3.4.4,15.10.2.12)在分析時很難找到。 – user123444555621 2010-10-25 09:01:03