神馬是EcmaScript5
首先得先搞清楚ECMAScript是神馬,我們知道JavaScript或者說LiveScript最開始是Netscape搞出來的,后來微軟也跟進搞出了Jscript,ScriptEase也有自己的CENvi,這樣就有了三個版本的瀏覽器Script各行其是,大家懂這個混亂的,于是乎標準化的問題被提上議事日程。1997年以JavaScript1.1為藍本的建議被提交到歐洲計算機制造商協會(European Computer Manufacturers Association),最后大家載歌載舞搞出了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啊神馬的,它主要包括
1. 語法
2. 類型
3. 語句
4. 關鍵字
5. 保留字
6. 操作符
7. 對象
而基于此的JavaScript致力于用戶和瀏覽器交互,所以在ECMAScript基礎上拓展了很多內容,主要包括
1. 核心(ECMAScript)
2. 文檔對象模型(DOM)
3. 瀏覽器對象模型(BOM)
這樣JavaScript以瀏覽器為宿主,進行瀏覽器與用戶的交互,使網頁具有動態性。ECMAScript和JavaScript關系是這樣的(ECMAScript出來一小塊兒是因為很多JavaScript并沒有完全實現標準)
嚴格模式
ECMAScript5 認可有些用戶希望限制使用語言中某些功能的可能性,不讓JavaScript容錯性那么高,對代碼嚴格一些,他們這樣做可能是為了安全考慮,避免他們認為是容易出錯的功能,獲得增強的錯誤檢查,或其他原因。
為此ECMAScript5引入“嚴格模式”概念,在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上關于嚴格模式的講解
瀏覽器支持
目前主流的瀏覽器都對ECMAScript5支持
- Opera 11.60 +
- Internet Explorer 9+(IE9不支持嚴格模式,IE10支持)
- Firefox 4 +
- Safari 5.1+(不支持Function.prototype.bind)
- Chrome 13+
詳細支持情況可以看看 ECMAScript 5 compatibility table
新特性
文章列表