ECMA-262規範 定義了ECMAScript支持的一套關鍵字,這些關鍵字標識了ECMAScript語句的開頭和/或結尾。根據規定,關鍵字是保留的,不能用做變量名或函數名。下面是ECMAScript關鍵字的完整列表:web
break else new var typeof編程
case finally return void數組
catch for switch while瀏覽器
default if throw delete安全
in try do instanceof編程語言
若是把關鍵字用做變量名或函數名,可能獲得諸如「Indetifier expected」(應該有標識符)這樣的錯誤信息。wordpress
ECMA-262的保留字函數
ECMAScript定義了一套保留字,保留字在某種意義上是爲了未來的而保留的單詞。所以,保留字不能被用做變量名或函數名。ECMA-262第3版中保留字的完整列表以下:this
abstract enum int short編碼
boolean export interface static
byte extends long super char final
native synchronized class float package
throws const goto private transient debugger
implements protected volatile double
import public
若是將保留字用做變量名或函數名,那麼除非未來的瀏覽器實現了該保留字,不然極可能收不到任何錯誤消息。當瀏覽器將其實現後,該單詞被看做關鍵字,如此將出現關鍵字錯誤。
1995年Netscape公司發佈的Netscape Navigator 2.0中,發佈了與Sun聯合開發的JavaScript 1.0而且大獲成功, 而且隨後的3.0版本中發佈了JavaScript1.1,恰巧這時微軟進軍瀏覽器市場,IE 3.0搭載了一個JavaScript的克隆版-JScript, 再加上Cenvi的ScriptEase(也是一種客戶端腳本語言),致使了三種不一樣版本的客戶端腳本語言同時存在。爲了創建語言的標準化,1997年JavaScript 1.1做爲草案提交給歐洲計算機制造商協會(ECMA),第三十九技術委員會(TC39)被委派來「標準化一個通用的,跨平臺的,中立於廠商的腳本語言的語法和語意標準」。最後在Netscape、Sun、微軟、Borland等公司的參與下制訂了ECMA-262,該標準定義了叫作ECMAScript的全新腳本語言。
今後之後的Javscript,JScript,ActionScript等腳本語言都是基於ECMAScript標準實現的。
因此,ECMAScript其實是一種腳本在語法和語義上的標準。實際上JavaScript是由ECMAScript,DOM和BOM三者組成的。 因此說,在JavaScript,JScript和ActionScript中聲明變量,操做數組等語法徹底同樣,由於它們都是ECMAScript。可是在操做瀏覽器對象等方面又有各自獨特的方法,這些都是各自語言的擴展。
自第三版發佈以來,ECMAScript因其與萬維網的關聯而得到了普遍應用,它實質上已經成爲全部web瀏覽器都提供的一種編程語言。爲編制第四版ECMAScript,人們作了大量的工做。儘管這些工做沒能完成,也沒有發佈第四版標準,卻促進了該語言的進化。ECMAScript第五版(發佈爲ECMA-262 5th edition)編入了不少事實上已經在瀏覽器實現中造成共識的語言規範解析,而且增長了對自第三版發佈以來出現的新功能的支持。這些新功能包括訪問器屬性、反射建立和對象檢測、屬性特性的程序控制、新增數組操做函數、JSON對象編碼格式、以及提供了改進的錯誤檢查和程序安全性的嚴格模式。
ES5 整體來講改動不多,最重要的是以下幾個改動。這裏先簡單介紹一下,稍後有相應篇章詳細描述。
能夠在函數定義的第一行經過一個字符串語法把這個函數聲明爲 嚴格模式
function() {
"use strict";
}
在嚴格模式下,會有以下一些限制:
默認支持 JSON.parse 和 JSON.stringify
如今能夠對一個對象的屬性設置 getter setter:
var obj = {};
Object.defineProperty(obj, "name", {
get: function() {
return name.toUpperCase();
},
set: function(n) {
name=n;
}
})
能夠定義一個對象的屬性是否能夠修改、是否能夠刪除、是否能夠添加:
Object.defineProperty( obj, "value", {
value: true,
writable: false,
enumerable: true,
configurable: true
});
如今能夠直接凍結一個對象,凍結分兩種:
如今能夠更方便的遍歷對象的屬性了:
數組新增了以下經常使用的方法:
因此你能夠放心的寫以下代碼:
[1,2,3].map(function(a){return a*a;})