足球资料库数据/孙祥/nba五佳球/足球直播哪个平台好 - cctv5今日现场直播

ECMAScript 2016新特性: Array.prototype.includes和冪運(yùn)算符
2016-02-23 11:53:55   來(lái)源:Abel Avram ,譯者 黃曉雯   評(píng)論:0 點(diǎn)擊:

ECMAScript 2016只新增兩個(gè)特性:Array prototype includes和冪運(yùn)算符(Exponentiation Operator)。Async函數(shù)需要等到明年才能進(jìn)入標(biāo)準(zhǔn)。

ECMAScript 2016只新增了兩個(gè)特性:Array.prototype.includes和冪運(yùn)算符(Exponentiation Operator)。Async函數(shù)需要等到明年才能進(jìn)入標(biāo)準(zhǔn)。

ECMAScript標(biāo)準(zhǔn)制定過(guò)程包含四個(gè)階段:提議(Proposal)、草案(Draft)、候選(Candidate)、完成(Finished)。每個(gè)新特性在進(jìn)入標(biāo)準(zhǔn)前都必須走完這四個(gè)階段。因此,只有進(jìn)入最后一個(gè)階段的特性能被包含在下一版本的JavaScript。雖然有22個(gè)處于不同階段的特性,僅有2個(gè)進(jìn)入完成(Finished)階段:Array.prototype.includes冪運(yùn)算符(Exponentiation Operator)

Array.prototype.includes

根據(jù)提案,下面的代碼展示了如何使用這一新特性:

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);

最初提議的語(yǔ)法是Array.prototype.contains,技術(shù)委員會(huì)把"contains"替換為"includes",因?yàn)?a >前者不是"網(wǎng)站兼容(web-compatible)"的,會(huì)導(dǎo)致大量網(wǎng)站崩潰。

冪運(yùn)算符(Exponentiation Operator)

冪運(yùn)算符的語(yǔ)法是:

Operator: var1 ** var2

一個(gè)簡(jiǎn)單的例子:

let cubed = 2 ** 3; // 2*2*2

比起2015年發(fā)布的ES 2015(ES6),今年發(fā)布的新標(biāo)準(zhǔn)相當(dāng)少。而再早的一個(gè)版本ES 5是在2009年發(fā)布的。這是因?yàn)門C39決定從2015年起每年發(fā)布一個(gè)新版本,而不是隔5、6年才發(fā)布一次大的更新。新特性進(jìn)入最后階段的一個(gè)條件是有至少2個(gè)兼容的實(shí)現(xiàn)并通過(guò)測(cè)試,而這正是其它特性沒(méi)能進(jìn)入這一版標(biāo)準(zhǔn)的主要原因。談及今年進(jìn)入標(biāo)準(zhǔn)的兩個(gè)新特性,ECMAScript審稿人Brian Terlson(@bterlson)告訴InfoQ:

ChakraCore已經(jīng)實(shí)現(xiàn)了Array.prototype.includes(我們很快會(huì)采用實(shí)驗(yàn)?zāi)J剑斠?jiàn)https://github.com/Microsoft/ChakraCore/issues/23)。我們也在ChakraCore上對(duì)冪運(yùn)算符進(jìn)行了實(shí)驗(yàn)性實(shí)現(xiàn)。SpiderMonkey和V8都實(shí)現(xiàn)了Array.prototype.includes,此外SpiderMonkey也實(shí)現(xiàn)了冪運(yùn)算符。因此根據(jù)標(biāo)準(zhǔn)制定過(guò)程,這兩個(gè)特性都可以進(jìn)入新標(biāo)準(zhǔn)。由于這些特性涉及的范圍比較小,比較容易獲得實(shí)現(xiàn)反饋。

在某些情況下,TC39委員會(huì)可以要求新特性必須有超過(guò)2個(gè)實(shí)現(xiàn)才能進(jìn)入最后階段。Async函數(shù)遇到的情況正是如此。雖然Async函數(shù)有很高的人氣,但目前仍處在候選(Candidate)階段。Terlson解釋說(shuō):

Async函數(shù)確實(shí)不在ES2016標(biāo)準(zhǔn)里。TC39過(guò)程并沒(méi)有對(duì)一個(gè)新特性何時(shí)才算擁有足夠多的實(shí)現(xiàn)給出明確的要求(標(biāo)準(zhǔn)制定過(guò)程文檔詳見(jiàn):https://tc39.github.io/process-document/),所以這只是針對(duì)具體特性做出的判斷。Async函數(shù)有超過(guò)2個(gè)的穩(wěn)定實(shí)現(xiàn)(在Chakra、TypeScript和Babel上都有實(shí)現(xiàn))。但對(duì)于Async函數(shù)這樣的新特性,技術(shù)委員會(huì)想確保沒(méi)有瀏覽器實(shí)現(xiàn)問(wèn)題(如網(wǎng)站崩潰、性能問(wèn)題等),最好在Async函數(shù)進(jìn)入ECMAScript標(biāo)準(zhǔn)前可以有在其他瀏覽器引擎上的穩(wěn)定實(shí)現(xiàn)。

另外一些進(jìn)入候選(Candidate)階段的特性有:SIMD.JS——SIMD的API,Object.values/Object.entries字符串填充(String padding)函數(shù)定義和調(diào)用時(shí)參數(shù)列表最后面的逗號(hào),以及Object.getOwnPropertyDescriptors。Terlson表示“很多在第三階段的特性很可能會(huì)進(jìn)入ES2017標(biāo)準(zhǔn),但也不能完全保證”。

查看英文原文:ECMAScript 2016: Array.prototype.includes and the Exponentiation Operator


感謝夏雪對(duì)本文的審校。

給InfoQ中文站投稿或者參與內(nèi)容翻譯工作,請(qǐng)郵件至editors@cn.infoq.com。也歡迎大家通過(guò)新浪微博(@InfoQ@丁曉昀),微信(微信號(hào):InfoQChina)關(guān)注我們,并與我們的編輯和其他讀者朋友交流(歡迎加入InfoQ讀者交流群InfoQ好讀者(已滿),InfoQ讀者交流群(#2)InfoQ好讀者)。

相關(guān)熱詞搜索:ecmascript 2016 語(yǔ)言 & 開(kāi)發(fā) ECMA JavaScript 動(dòng)態(tài)語(yǔ)言 標(biāo)準(zhǔn)化 企業(yè)架構(gòu)

上一篇:VS2015 Update 2專注于穩(wěn)定性的提升
下一篇:Revolution R Enterprise現(xiàn)已命名為Microsoft R Server

分享到: 收藏