了解一下JavaScript的未來——ECMAScript5
神馬是EcmaScript5
首先得先搞清楚ECMAScript是神馬,我們知道JavaScript或者說LiveScript最開始是Netscape搞出來的,後來微軟也跟進搞出了Jscript,ScriptEase也有自己的CENvi,這樣就有了三個版本的瀏覽器Script各行其是,大家懂這個混亂的,於是乎標準化的問題被提上議事日程。1997年以JavaScript1.1為藍本的建議被提交到歐洲計算機制造商協會( E uropean C omputer M anufacturers A ssociation),最後大家載歌載舞搞出了ECMA-262——一種名為ECMAScript的新腳本語言標準。第二年,ISO/IEC(國際標準化組織和國際電工委員會)也采用ECMAScript作為標準,此後天下太平,各大瀏覽器廠商以ECMAScript作為各自實現JavaScript的基礎,當然只是基礎,沒完全按照來,否則我們也不會有那麽多瀏覽器兼容性問題。
那麽ECMAScript5是什麽呢?顧名思義跟iPhone5一樣是這個奇怪東東的第五個版本,我們現在常用的時ECMAScript3,相比前兩個版本這個版本算是一門正真的編程語言而不是玩具了,變得很流行。
為什麽沒有ECMAScript4就開始有ECMAScript5了呢?實際上4也是有的,不過這個版本幾乎顛覆了之前版本,沒有瀏覽器廠商跟進,基本就廢棄了,而ECMAScript5只是在3.1的基礎上做了一定的拓展,而且各大瀏覽器廠商響應積極,所以稱得上是JavaScript的未來。
ECMAScript與JavaScript有神馬關系
雖然我們經常拿著兩個東東都表達相同的含義,但正如剛才提到,JavaScript是各大瀏覽器廠商基於ECMAScript的實現,也就是說ECMAScript是標準,而JavaScript是真正的語言。
其實看看 ECMAScript文檔 可以發現ECMAScript和web瀏覽器沒有依賴關系,並不包含輸入和輸出的定義,也沒有DOM啊、BOM啊神馬的,它主要包括
而基於此的JavaScript致力於用戶和瀏覽器交互,所以在ECMAScript基礎上拓展了很多內容,主要包括
- 文檔對象模型(DOM)
- 瀏覽器對象模型(BOM)
這樣JavaScript以瀏覽器為宿主,進行瀏覽器與用戶的交互,使網頁具有動態性。ECMAScript和JavaScript關系是這樣的(ECMAScript出來一小塊兒是因為很多JavaScript並沒有完全實現標準)
嚴格模式
ECMAScript5 認可有些用戶希望限制使用語言中某些功能的可能性,不讓JavaScript容錯性那麽高,對代碼嚴格一些,他們這樣做可能是為了安全考慮,避免他們認為是容易出錯的功能,獲得增強的錯誤檢查,或其他原因。
為此ECMAScript引入“嚴格模式”概念,在JavaScript文件頂部或者方法上面添加字符串”use strict”就可以啟用嚴格模式,因為這就是一個字符串,所以老式瀏覽器會直接忽略,不會造成兼容性困擾。
var o = Object.create({}, { ‘sex‘:{
value: ‘male‘,
writable: false,
enumerable: false,
configurable: false
}
});
o.sex = ‘female‘;
console.log(o.sex);//male
雖然我們把sex的configurable設成了false,也就是不能修改sex的值,但是我們在代碼中試圖修改也沒什麽事兒,只是sex不會改變而已,但是如果我們使用嚴格模式
‘use strict‘
var o = Object.create({}, { ‘sex‘: {
value: ‘male‘,
writable: false,
enumerable: false,
configurable: false
}
});
o.sex = ‘female‘; //Uncaught TypeError: Cannot assign to read only property ‘sex‘ of #<Object>
console.log(o.sex);
在賦值的時候程序會直接報錯,終止執行,關於在嚴格模式下哪些操作做不得可以看看 MSDN上關於嚴格模式的講解
瀏覽器支持
目前主流的瀏覽器都對ECMAScript支持
- Opera 11.60 +
- Internet Explorer 9+(IE9不支持嚴格模式,IE10支持)
- Firefox 4 +
- Safari 5.1+(不支持Function.prototype.bind)
- Chrome 13+
詳細支持情況可以看看 ECMAScript 5 compatibility table
新特性
ECMAScript5 Object的新屬性方法
ECMAScript5 Array新增方法
ECMAScript5的其它新特性
querySelector和querySelectorAll
了解一下JavaScript的未來——ECMAScript5