ECMAScript 2016新特性: Array.prototype.includes和冪運算符
ECMAScript 2016只新增了兩個特性:Array.prototype.includes和冪運算符(Exponentiation Operator)。Async函數需要等到明年才能進入標準。
ECMAScript標準制定過程 包含四個階段:提議(Proposal)、草案(Draft)、候選(Candidate)、完成(Finished)。每個新特性在進入標準前都必須走完這四個階段。因此,只有進入最后一個階段的特性能被包含在下一版本的JavaScript。雖然有 22個處于不同階段的特性 ,僅有2個進入完成(Finished)階段: Array.prototype.includes 和 冪運算符(Exponentiation Operator) 。
Array.prototype.includes
根據提案,下面的代碼展示了如何使用這一新特性:
assert([1, 2, 3].includes(2) === true); assert([1, 2, 3].includes(4) === false); assert([1, 2, NaN].includes(NaN) === true); assert([1, 2, -0].includes(+0) === true); assert([1, 2, +0].includes(-0) === true); assert(["a", "b", "c"].includes("a") === true); assert(["a", "b", "c"].includes("a", 1) === false);
最初提議的語法是Array.prototype.contains,技術委員會把"contains"替換為"includes",因為 前者不是"網站兼容(web-compatible)"的 ,會導致大量網站崩潰。
冪運算符(Exponentiation Operator)
冪運算符的語法是:
Operator: var1 ** var2
一個簡單的例子:
let cubed = 2 ** 3; // 2*2*2
比起2015年發布的ES 2015(ES6),今年發布的新標準相當少。而再早的一個版本ES 5是在2009年發布的。這是因為TC39決定從2015年起每年發布一個新版本,而不是隔5、6年才發布一次大的更新。新特性進入最后階段的一個條件是有至少2個兼容的實現并通過測試,而這正是其它特性沒能進入這一版標準的主要原因。談及今年進入標準的兩個新特性,ECMAScript審稿人Brian Terlson( @bterlson )告訴InfoQ:
ChakraCore已經實現了Array.prototype.includes(我們很快會采用實驗模式,詳見 https://github.com/Microsoft/ChakraCore/issues/23 )。我們也在ChakraCore上對冪運算符進行了實驗性實現。SpiderMonkey和V8都實現了Array.prototype.includes,此外SpiderMonkey也實現了冪運算符。因此根據標準制定過程,這兩個特性都可以進入新標準。由于這些特性涉及的范圍比較小,比較容易獲得實現反饋。
在某些情況下,TC39委員會可以要求新特性必須有超過2個實現才能進入最后階段。Async函數遇到的情況正是如此。雖然Async函數有很高的人氣,但目前仍處在候選(Candidate)階段。Terlson解釋說:
Async函數確實不在ES2016標準里。TC39過程并沒有對一個新特性何時才算擁有足夠多的實現給出明確的要求(標準制定過程文檔詳見: https://tc39.github.io/process-document/ ),所以這只是針對具體特性做出的判斷。Async函數有超過2個的穩定實現(在Chakra、TypeScript和Babel上都有實現)。但對于Async函數這樣的新特性,技術委員會想確保沒有瀏覽器實現問題(如網站崩潰、性能問題等),最好在Async函數進入ECMAScript標準前可以有在其他瀏覽器引擎上的穩定實現。
另外一些進入候選(Candidate)階段的特性有: SIMD.JS ——SIMD的API, Object.values/Object.entries , 字符串填充(String padding) , 函數定義和調用時參數列表最后面的逗號 ,以及 Object.getOwnPropertyDescriptors 。Terlson表示“很多在第三階段的特性很可能會進入ES2017標準,但也不能完全保證”。
查看英文原文: ECMAScript 2016: Array.prototype.includes and the Exponentiation Operator
感謝夏雪對本文的審校。
給InfoQ中文站投稿或者參與內容翻譯工作,請郵件至editors@cn.infoq.com。也歡迎大家通過新浪微博(@InfoQ,@丁曉昀),微信(微信號: InfoQChina )關注我們,并與我們的編輯和其他讀者朋友交流(歡迎加入InfoQ讀者交流群 (已滿),InfoQ讀者交流群(#2)
)。
來自: http://www.infoq.com/cn/news/2016/02/ecmascript-2016