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標(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讀者交流群(#2)
)。
相關(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

頻道總排行
- Cisco NetFlow v9為何無(wú)人問(wèn)津?
- 技術(shù)專題:智能化運(yùn)維
- 開(kāi)源代碼管理:如何安全地使用開(kāi)源庫(kù)?
- Facebook架構(gòu)解讀
- IT運(yùn)維分析與海量日志搜索需要注意什么(1)
- 金山運(yùn)維肖力:如何將業(yè)務(wù)遷移到虛擬化環(huán)境并穩(wěn)定運(yùn)行(1)
- Apache Ignite(四):基于Ignite的分布式ID生成器
- CrazyEye,一款國(guó)人開(kāi)源的堡壘機(jī)軟件(1)
- SDN時(shí)代的網(wǎng)絡(luò)管理系統(tǒng)會(huì)走向何方
- WOT2016吳兆松:Zabbix監(jiān)控自動(dòng)化的未來(lái)如何發(fā)展
頻道本月排行
- 8你消費(fèi)我買單——"漏洞"天使OneRASP...
- 7有了Jenkins,為什么還需要一個(gè)獨(dú)立...
- 6IT運(yùn)維分析與海量日志搜索需要注意什么(1)
- 5新浪微博王傳鵬:微博推薦架構(gòu)的演進(jìn)(1)
- 4史上最大機(jī)器學(xué)習(xí)數(shù)據(jù)集,雅虎對(duì)外開(kāi)...
- 4雅虎開(kāi)源可以提升流操作速度的DataSketches
- 4大眾點(diǎn)評(píng)高可用性系統(tǒng)運(yùn)維經(jīng)驗(yàn)分享
- 4云運(yùn)維如何選擇部署適合自身的IDC和...
- 4開(kāi)源還是商用?十大云運(yùn)維監(jiān)控工具測(cè)...
- 4論開(kāi)發(fā)與運(yùn)維沖突的根源、表現(xiàn)形式及...