跳到主要內容
黯羽輕揚每天積累一點點

ES2016

免費2018-10-20#JS#es2016特性#es7新特性#es规范发布流程#js指数运算符#js幂运算符

一個陣列包含性檢測方法,一個冪運算子。沒了。

一.特性概覽

ES2016 (也就是 ES7)發布於 2016 年 6 月,僅包含 2 個新特性

一個陣列包含性檢測方法,一個冪運算子。沒了,ES2016 就這兩個新特性,還都是錦上添花的。的東西

P.S. 更多過審特性,見 Finished Proposals

二.Array.prototype.includes

陣列的 includes 方法,具體如下:

// 返回 true | false,表示包含不包含
// 可選參數 fromIndex 表示從該 index 開始找
//    預設是 0,負數表示倒數第幾個(array.length + fromIndex)
array.includes(item, [fromIndex])

用來確定陣列中是否包含指定元素,類似於(但不等效):

array.indexOf(item) !== -1

二者之間存在細微的差異:

  • NaN: [NaN].includes(NaN) === true[NaN].indexOf(NaN) === -1

  • 稀疏陣列: [1, , 3].includes(undefined) === true[1, , 3].indexOf(undefined) === -1

簡言之, includes 能夠處理 NaN ,並且不會跳過稀疏陣列中的空位(也就是說不判斷陣列中的元素是否存在)

具體的, includes 比較相等性時採用 SameValueZero 演算法:

  • 物件僅比較引用

  • 基本值比較型別和值

  • 值比較中存在 2 個特例, +0-0 相等, NaNNaN 相等

三.Exponentiation operator

冪運算子,具體如下:

// 底數 ** 指數
base ** exponent

另外,還提供了 **=

let n = 2;
// 運算並賦值
n **= 4;
n; // => 16

完全等效Math.pow(base, exponent) ,包括這些特殊 case:

NaN ** 0;       // => 1
Infinity ** 0;  // => 1
-5 ** NaN;      // => NaN
NaN ** NaN;     // => NaN

沒錯,完全等效,因為畢竟冪運算是無法重新定義的(若不一致會引發混亂)

四.為什麼這一版這麼小?

與 ES 發版流程有關, ES 新特性提議分為 5 個階段:

  • stage 0(Strawman):初稿(比 Draft 更草一些)

  • stage 1(Proposal):提議

  • stage 2(Draft):草案

  • stage 3(Candidate):候選提議

  • stage 4(Finished):過審提議

特性提議隨時可以提,多線並行審核推進,但發版週期是固定的

  • 2 月 1 日:產出候選草案(Candidate Draft)

  • 2-3 月: 60 天的修訂篩選期(royalty-free opt-out period)

  • 3 月 TC39 會議:合入 stage 4(過審的)提議,校準最終語義,並從主分支遷出新規範版本,之後只接受編輯更改

  • 4-6 月: ECMA CC 與 ECMA GA 審核期

  • 7 月:由 ECMA 大會(ECMA General Assembly)批准新標準

每年 7 月發版,把新過審的特性提議帶上去,所以一個版本包含的新特性數量取決於這一年有多少特性過審了

這樣一方面能夠保證規範發布的特性都經過廣泛審核確認了,另一方面保持每年一版的頻繁節奏,避免再出現 ES2015 那樣的大版本( 6 年憋一版)

P.S. 關於 Ecma TC39 的 ES 發版流程的更多資訊,見 The TC39 Process

參考資料

評論

暫無評論,快來發表你的看法吧

提交評論