預計在2014年底,ECMAScript 6將會正式釋出,他的草案在13年3月份被凍結,後續提出新特性將會移至ECMASript 7中。目前還沒有哪款瀏覽器實現了ES6的全部內容,相容性最強的一款要數FireFox了。具體情況可以在這裡檢視。

關於 ECMAScript 6 草案,我在部落格裡頭複製了一份,可以點選這裡

JavaScript的內容是越來越豐富,在ES6中還添加了模組(module)和類(class),感覺他已經失去了曾經的單純了,不知道這些新功能的補充對開發者來說是福音還是負擔。之前寫過兩篇關於ES6的文章,ECMAScript 6 簡介ECMAScript 6中的let和const關鍵詞,本文將一一介紹ES6中的一些新特性。

本文地址:http://www.cnblogs.com/hustskyking/p/ecmascript6-overview.html,轉載請註明源地址。

注意:如果想測試以下屬性,請安裝 0.11+ 版本的 node,並新增上 --harmony 引數。

一、let 和 const

這個內容在 ECMAScript 6中的let和const關鍵詞 一文中已經介紹過了。簡單來說就是一句話:ES6中引入了塊級作用域,let的有效區間是他所在的 {} 大括號中。const 為常量,定義之後不能更改,也刪除不了。

> const PI = 3.14;
> Object.getOwnPropertyDescriptor(window, PI)
Object {value: 3.1415, writable: false, enumerable: true, configurable: false}

writable 和 configurable 都是 false。

二、多變數的模式賦值

寫過 coffee-script 的人都知道,我們可以這樣給一個數據賦值:

num[1..3] = ["hello", "i'am", "Barret Lee"]

ES6中也允許類似的多變數賦值:

var [x, y, z] = ["hello", "i'am", "Barret Lee"];

更強大的是,他還適合物件:

var { foo, bar } = { foo: "Barret", bar: "Lee" };

這種賦值方式是模式匹配的,只要左側跟右側對應,便可以成功賦值。感覺新手不會太適應這種寫法。

三、陣列推導

先看例子:

var a1 = [1, 2, 3, 4];
var a2 = [i * 2 for (i of a1)]; a2 // [2, 4, 6, 8]

這東西只是簡化了程式設計,沒有從根本上增加功能和特性,寫 coffee 的人應該比較喜歡,我看著還是有點不習慣,其實上面的寫法就等價於:

var a1 = [1, 2, 3, 4];
var a2 = a1.map(function (i) { return i * 2 });

我想除非是程式碼長度有限制,否則這玩意兒正式出來了我也不會用它。

四、字串的擴充套件

這一塊的內容相當於是給 JS 編碼打一個補丁,這個補丁用來彌補雙位元組 UTF-16 字元帶來的問題,引入的各個函式也只是對不同場景的修復。這個擴充套件還是相當重要的,尤其是 ArrayBuffer 中資料型別的相關處理,涉及到很多類似 Float64Array Uint32Array 等型別化陣列的處理,我在 你所不知道的JavaScript陣列 曾提到過。

1. codePointAt

這個地方需要解釋下 JavaScript 對字元的儲存模式,JavaScript 中的字串是以 UTF-16 為程式碼單元,通常我們使用的字元範圍都在 Unicode 值 0x10000 以內,他們對應的 UTF-16 就是它們自身,但 Unicode 中也存在這個範圍之外的字元,這時候就需要兩個 UTF-16 字元來描述,比如:

alert("