NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

ECMAScript 2016 新特性: Array.prototype.includes 和幂运算符

  • 2016-02-21
  • 本文字数:1567 字

    阅读完需:约 5 分钟

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

2016-02-21 18:002700

评论

发布
暂无评论
发现更多内容

澳鹏中国智能可配置工作流(Workflow 2.0)全新升级

澳鹏Appen

人工智能 工作流 workflow 数据标注 训练数据

如何高效上架HarmonyOS原子化服务?这个平台帮你搞定!

HarmonyOS开发者

HarmonyOS

恒源云(GPUSHARE)_CV领域有关【直方图】的论文小记

恒源云

深度学习 CV

阿里云视频云vPaaS低代码音视频工厂:极速智造,万象空间

阿里云视频云

音视频 低代码 视频云 视频开发

Android技术分享| Android WebRTC 对 AudioRecord 的使用

anyRTC开发者

android 音视频 WebRTC 移动开发 AudioRecord

【分布式技术专题】「Zookeeper系列」为大家介绍一下Zookeeper的"开发伴侣"—Curator-Framework(基础篇)

洛神灬殇

zookeeper curator 1月月更 CuratorFramework

【堡垒机】2022年企业买堡垒机就选行云管家!五大优点看这里!

行云管家

等保 堡垒机 过等保 等保2.0

网易云信又双叒受到Gartner关注,看看这次的报告说了什么?

网易云信

Gartner 通信平台 CPaaS

【数据库】查询优化之子连接优化

恒生LIGHT云社区

数据库 sql SQL子查询 子查询

复旦大学陈平博士:网络攻击猖獗,如何应对数据安全与内生安全挑战?

星环科技

网络安全

大数据实践:数据指标中心的建设思路

五分钟学大数据

大数据 1月月更

大数据开发之Spark SQL 的 Catalyst介绍

@零度

大数据 spark SQL

rosdep update遇到ERROR: error loading sources list: The read operation timed out问题

Ayosh

ROS

盘点 2022 云原生实战峰会重磅发布

阿里巴巴云原生

阿里云 开源 容器 云原生

【分布式技术专题】「Zookeeper系列」为大家介绍一下 Zookeeper 的"开发伴侣"—Curator-Framework(组件篇)

洛神灬殇

zookeeper ZooKeeper原理 1月月更 Curator-Framework

数据库审计设备选择哪家好?谁能告知?

行云管家

数据库 服务器 数据库审计

人员流动大,简历管理纷杂怎么办?用低代码可以解决嘛?

优秀

低代码

今儿新学会一个写日志技能:双缓冲机制

华为云开发者联盟

线程 日志 应用程序 双缓冲区 Web程序

MASA Framework - 整体设计思路

MASA技术团队

C# .net 框架 Framework dapr

极客星球 | MobPush之FCM离线消息解密

MobTech袤博科技

FCM 离线消息

阿里云消息队列 2021 新功能新特性重要里程碑

阿里巴巴云原生

kafka 阿里云 RocketMQ 云原生 消息队列

有关 TiDB 升级的二三事——教你如何快乐升级

PingCAP

Apache 基金会年度报告 | ShardingSphere 代码提交量位列前十

SphereEx

数据库 开源 基金会 ShardingSphere SphereEx

【有奖评测】无影云电脑评测征集令,晒出评测赢万元豪礼

阿里云弹性计算

阿里云 无影云电脑 征文活动

深度解读企业云上办公利器「无影云电脑」

阿里云弹性计算

阿里云 无影云电脑

使用 Visual Studio Code 编写和激活 ABAP 代码

Jerry Wang

vscode abap 1月月更 vs-code

12月发布两大特别专区!一图了解龙蜥社区大事件

OpenAnolis小助手

开源 操作系统 运营

main函数你到底知道多少

恒生LIGHT云社区

后端 开发 Java’ main方法

java开发之SpringBoot实现自动执行代码

@零度

JAVA开发 springboot

星环科技AIoT平台让工业制造设备更智能、更耐用

星环科技

为企业选择合适的CRM系统的技巧

低代码小观

CRM 客户关系管理 CRM系统 客户关系管理系统 企业管理软件

ECMAScript 2016新特性: Array.prototype.includes和幂运算符_JavaScript_Abel Avram_InfoQ精选文章