淺談ES5/ES6

ES概念解釋:

  ECMAScript是一種由Ecma國際(前身爲歐洲計算機制造商協會,英文名稱是European Computer Manufacturers Association)經過ECMA-262標準化的腳本程序設計語言

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-2623版中保留字的完整列表以下: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

若是將保留字用做變量名或函數名,那麼除非未來的瀏覽器實現了該保留字,不然極可能收不到任何錯誤消息。當瀏覽器將其實現後,該單詞被看做關鍵字,如此將出現關鍵字錯誤。

1995Netscape公司發佈的Netscape Navigator 2.0中,發佈了與Sun聯合開發的JavaScript 1.0而且大獲成功, 而且隨後的3.0版本中發佈了JavaScript1.1,恰巧這時微軟進軍瀏覽器市場,IE 3.0搭載了一個JavaScript的克隆版-JScript, 再加上CenviScriptEase(也是一種客戶端腳本語言),致使了三種不一樣版本的客戶端腳本語言同時存在。爲了創建語言的標準化,1997JavaScript 1.1做爲草案提交給歐洲計算機制造商協會ECMA),第三十九技術委員會(TC39)被委派來標準化一個通用的,跨平臺的,中立於廠商的腳本語言的語法和語意標準。最後在NetscapeSun、微軟、Borland等公司的參與下制訂了ECMA-262,該標準定義了叫作ECMAScript的全新腳本語言。

今後之後的JavscriptJScriptActionScript等腳本語言都是基於ECMAScript標準實現的。

因此,ECMAScript其實是一種腳本在語法和語義上的標準。實際上JavaScript是由ECMAScriptDOMBOM三者組成的。 因此說,在JavaScriptJScriptActionScript中聲明變量,操做數組等語法徹底同樣,由於它們都是ECMAScript。可是在操做瀏覽器對象等方面又有各自獨特的方法,這些都是各自語言的擴展。

 

ECMAScript發生了什麼變化?

自第三版發佈以來,ECMAScript因其與萬維網的關聯而得到了普遍應用,它實質上已經成爲全部web瀏覽器都提供的一種編程語言。爲編制第四版ECMAScript,人們作了大量的工做。儘管這些工做沒能完成,也沒有發佈第四版標準,卻促進了該語言的進化。ECMAScript第五版(發佈爲ECMA-262 5th edition)編入了不少事實上已經在瀏覽器實現中造成共識的語言規範解析,而且增長了對自第三版發佈以來出現的新功能的支持。這些新功能包括訪問器屬性、反射建立和對象檢測、屬性特性的程序控制、新增數組操做函數、JSON對象編碼格式、以及提供了改進的錯誤檢查和程序安全性的嚴格模式。

ES5 新增內容

ES5 整體來講改動不多,最重要的是以下幾個改動。這裏先簡單介紹一下,稍後有相應篇章詳細描述。

use strict

能夠在函數定義的第一行經過一個字符串語法把這個函數聲明爲 嚴格模式

function() {

  "use strict";

}

在嚴格模式下,會有以下一些限制:

  • 未聲明的變量賦值直接報錯,而不是變成全局變量
  • 函數默認的 this 將變成 undefined 而不是默認指向 window
  • 對只讀屬性進行寫操做,刪除不可刪除屬性,對不可拓展的對象添加屬性均會拋出異常
  • 禁止使用 with 語句
  • 重名的屬性會報錯,重名的函數參數會報錯

JSON 支持

默認支持 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

});

如今能夠直接凍結一個對象,凍結分兩種:

  • Object.seal(obj), 使對象的屬性配置配置沒法修改,等價於給每個屬性都設置成 configurale=false
  • Object.freeze(obj),除了 seal 以外,它還會是屬性值自己沒法被修改,至關於對每一個屬性同時進行了 configurable=false 和 writable=false

如今能夠更方便的遍歷對象的屬性了:

  • Object.getOwnPropertyNames
  • Object.keys

數組新增方法

數組新增了以下經常使用的方法:

  • map
  • every
  • filter
  • forEach
  • indexOf
  • reduce
  • reduceRight
  • some

因此你能夠放心的寫以下代碼:

[1,2,3].map(function(a){return a*a;})

REFERENCE

1. ECMAScript_百度百科

2. http://www.zhangxinxu.com/wordpress/?p=2148

相關文章
相關標籤/搜索