ECMAScript 5正式發佈

這周ECMAScript 5也即衆所周知的JavaScript正式發佈了(pdf),在給基本庫帶來更新的同時,還引入了更加嚴格的運行時模型,來幫助定位並移除一般的代碼錯誤。html

而早期對於ECMAScript 4的標準化工做基本就算是失敗了;只有Adobe的ActionScript是基於建議的變化的。ECMA甚至都沒有發佈一個版本4的規範,由於不一樣的組織對於發展的進度並不滿意;就這樣,也沒有瀏覽器來支持它了。web

在過去的幾年,隨着JavaScript引擎的大力改善,好比NitroTraceMonkey,JavaScript已經極具性能,以Google Wave爲表明的在線協做應用能夠證實這一點。甚至還有伴隨GWT 2.0發佈的Google Chrome擴展Speed Tracer,來幫助優化JavaScript應用的性能。chrome

從這點上來說,ECMAScript 5旨在和當前的ECMAScript 3版本保持向後兼容(以尋求在不一樣瀏覽器上更快速的採用),並對開發者提供了更加嚴格的限制來避免一般的編碼陷阱。api

嚴格模式數組

嚴格模式的引入,目的在於避免ECMAScript應用中一般的代碼問題。這是經過在單元(腳本或函數)上指定一句話來達到的:瀏覽器

"use strict;"

這句話不會對已有的運行時產生什麼影響,但版本是5的新運行時就會爲整個腳本(若是這句話定義在腳本開頭)或者單個函數(若是定義在函數的開頭)打開嚴格模式。這樣就容許計劃中的既有代碼對嚴格模式和非嚴格模式的混合使用。那麼,嚴格模式意味着什麼呢?安全

  • 變量在使用前必須聲明。換句話說,i=3這下就是個運行時錯誤了;須要var i=3(若是i在作做用域裏面沒有定義過)
  • eval變成保留字,而從eval引入的新變量再也不有效,所以eval("var i=3"); print(i);如今會拋出錯誤。
  • 再也不使用八進制;因此010就是十,再也不是八。
  • 若是configurable被設置成false,delete就不能使用在參數、函數、變量或者其餘屬性上。
  • 通常會帶來錯誤的with語句,將再也不使用,會被認爲是語法錯誤。
  • 函數再也不能使用具備相同名稱的重複參數。
  • 對象再也不能使用具備相同名稱的重複屬性。
  • arguments和caller變量再也不可變。
  • 對全局對象的訪問將會是運行時錯誤。

庫擴展app

基本庫中的其餘擴展包括:ecmascript

  • Date如今能夠支持生成ISO8601格式的日期(好比20091209T12:34:56Z),並能夠解析。
  • String如今有內建的trim()方法
  • 新添JSON對象包括parse和stringify方法來支持JSON數據的高效生成;就像eval,但在減小代碼時不會帶來安全影響。另外,不單單可使用RFC 4627中的JSONObject和JSONArray,還可使用JSONValue。(RFC 4627把JSON-Text限制成一個對象或者數組)
  • 新添bind內建方法,就跟Prototype的bind方法的語義同樣。
  • 數組如今能夠支持indexOf(),map(),filter()和reduce()。
  • 對象如今有seal()方法(防止添加新的屬性和刪除既有屬性)和freeze()方法(使得全部屬性變成只讀,同時防止新添屬性或刪除屬性)
  • Object.keys()能夠列出全部能列舉的對象屬性。
  • Object.getOwnPropertyNames()能夠列出全部能列舉和不能列舉的屬性。
  • Object.getPrototypeof()能夠獲得指定對象的prototype屬性。

總結函數

新增的標準JSON對象解析機制和嚴格模式將會讓開發者受益良多,使得轉化成Prototype和其餘擴展庫須要的更小型庫成爲可能。從JSON流解析出ISO日期如今要變得比之前方便不少,並且看起來會成爲未來日期表示事實上的標準。最後,由於此次是向後兼容的,並從Prototype這樣既有庫得到靈感,開發者和web瀏覽器頗有可能在不久未來會爲JavaScript帶來新的特性。

相關文章
相關標籤/搜索