ES2016
一.特性概覽
ofollow,noindex" target="_blank">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
相等,NaN
與NaN
相等
三.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
參考資料
-
JavaScript/New_in_JavaScript/ECMAScript_Next_support_in_Mozilla" rel="nofollow,noindex" target="_blank">ECMAScript Next support in Mozilla