【译】ECMAScript 2016:Array.prototype.includes 和幂运算

转载文章,文章经 LiteCodes 授权,转载至本博客。

原文地址:【译】ECMAScript 2016:Array.prototype.includes 和幂运算

ECMAScript 2016 将包含的新特性仅有 Array.prototype.includes 和幂运算。异步方法将会推迟道明年。

ECMAScript 标准化过程包含了四个主要阶段:提案、草案、候选、完成。新的特性必须通过上述四个阶段,才能够添加至 ECMAScript 标准中。所以,只有在“完成”阶段的特性才会被添加至下一个 JavaScript 版本中。虽然有22个特性在各种阶段中,但只有两个处于完成阶段:Array.prototype.includes 和幂运算

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 兼容”,将会导致很多网站出现问题。

幂运算

幂运算运算符语法如下:

运算符: var1 ** var2

一个简单的例子:

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

ECMAScript 2016的发布相较于 ES 2015(ES6)而言小了很多。其原因是,ES 5 于2009年发布,而 ES6于2015年发布。委员会认为,如果可能的话,每年发布一个新版本要优于5至6年才发布一个版本。一个特性能够通过最终阶段的一个条件是,至少“两个兼容的实现能够通过测试”,这是其他特性没能通过最终阶段的主要原因。关于成功进入“完成”阶段的两个特性,ECMAScript 标准编纂者 Brian Terlson(@bterlson)告诉 InfoQ:

 ChakraCore 已经实现了 Array.prototype.includes(并且我们很快会将其从实验模式中移出,详情参考:https://github.com/Microsoft/ChakraCore/issues/23)。在实验模式下,我们同样实现了幂运算。SpiderMonkey 和 V8 同样实现了 Array.prototype.includes,并且 SpiderMonkey 实现了幂运算。因此,从标准制定流程的角度看,这些特性已经足够完善。但是,实现这些特性所得到的反馈,仅仅是在小范围内获得的。

在某些情况下,针对某个特性,TC39 委员会可以要求有两个以上的实现后,才允许该特性通过最终阶段。正如异步方法,虽然是一个令人期待的功能,但依然停留在候选阶段。Terlson 解释道:

异步方法确实不在 ES2016 中。TC39 委员会对该特性的实现并没有明确的要求(详情参见:https://tc39.github.io/process-document/),所以这个特性的裁决将?。异步方法特性已经拥有了超过两个能够彼此协作的实现(Chakra 实现该特性,除了 TypeScript 和 Babel 外),但是像异步方法这种特性,委员会希望能够确保没有浏览器实现会导致问题(如网站崩溃或性能问题等)。所以,在它纳入 ECMAScript 标准前,委员会希望看到更多其他的能够彼此协作的浏览器实现。

 

其他位于“候选”阶段的特性有:

“很多其他第三阶段的特性也有可能赶得上 ES2017,但也只是可能,无法保证。” Terlson 补充说。

posted @ 2016-02-20 13:52  Rainisic  阅读(183)  评论(0编辑  收藏  举报