淺談ES5/ES6


ES概念解釋:

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

ECMA-262規范 定義了ECMAScript支持的一套關鍵字,這些關鍵字標識了ECMAScript語句的開頭和/或結尾。根據規定,關鍵字是保留的,不能用作變量名或函數名。下面是ECMAScript關鍵字的完整列表:

break else new var typeof

case finally return void

catch for switch while

default if throw delete

in try do instanceof

如果把關鍵字用作變量名或函數名,可能得到諸如“Indetifier expected”(應該有標識符)這樣的錯誤信息。

ECMA-262的保留字

ECMAScript定義了一套保留字,保留字在某種意義上是為了將來的而保留的單詞。因此,保留字不能被用作變量名或函數名。ECMA-2623版中保留字的完整列表如下:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM