写点什么

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:003098

评论

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

当内卷风波及代码领域,看Alluxio将会采取怎样的块分配策略

Alluxio

腾讯 存储 Alluxio block 8月月更

大数据训练营毕业总结

Geek_Q

云堡垒机主要针对运维过程中的什么进行管理和审计?

行云管家

运维 堡垒机 IT运维 云堡垒机

五天玩转EMAS Serverless

云端explorer

云计算 Serverless emas

Go-Excelize API源码阅读(十四)——GetSheetFormatPr

Regan Yue

开源 源码刨析 Go 语言 8月日更 8月月更

TiDB 和 Java 的简单 CRUD 应用程序

TiDB 社区干货传送门

利用现有数据库管理系统创建一个安全的分布式数据库集群

亚马逊云科技 (Amazon Web Services)

大数据 分布式 Tech 专栏

对话ACE第五期:到底什么才是真正的HTAP?

OceanBase 数据库

优雅,永不过时!SpringBoot中这样编写Controller层代码,那叫一个完美

Java永远的神

Java 程序员 面试 程序人生 springboot

如何在企业数字化团队内部实现数据分析建模成果的结构化整合沉淀

ModelWhale

工作流 数字化转型 数字化 案例分享 提高效率

如何在 TiDB Cloud 上使用 Databricks 进行数据分析 | TiDB Cloud 使用指南

TiDB 社区干货传送门

HarmonyOS Connect FAQ第四期

HarmonyOS开发者

HarmonyOS

希捷亮相OCP China Day 2022,与生态伙伴共话绿色存储之道

极客天地

故障处理 | DM 搭建 MySQL 8.0 同步链路报错:code=26005

TiDB 社区干货传送门

安装 & 部署 TiDB 源码解读

TiDB 和 Golang 的简单 CRUD 应用程序

TiDB 社区干货传送门

如何让 TiDB 集群管理“更省心”?TiUniManager(原 TiEM)使用教程来了

TiDB 社区干货传送门

TiFlash Proxy 模块介绍

TiDB 社区干货传送门

离线部署系列文章之一:TiDBv5.3.0集群部署&源码部署 Haproxy v2.5.0

TiDB 社区干货传送门

实践案例 版本升级 管理与运维 安装 & 部署 扩/缩容

传统堡垒机数据可以迁移到云堡垒机上吗?方式有哪些?

行云管家

云计算 网络安全 堡垒机

一对一直播软件——如何实现音视频传播?

开源直播系统源码

软件开发 直播系统源码 一对一语音聊天软件 语音直播系统

某站下载量过W的近4000页“Java面试合集”号称大厂面试零门槛

收到请回复

Java 程序员 面试 金九银十

手把手教你实现 TiFlash 向量化函数丨十分钟成为 TiFlash Contributor

TiDB 社区干货传送门

离线部署系列文章之二:TiDB集群升级(5.3.0->5.4.2)&缩扩容 TiDB Server、PD、TiKV、TiFlash

TiDB 社区干货传送门

版本升级 集群管理 管理与运维 安装 & 部署

什么!阿里最新版Spring Cloud Alibaba项目文档,竟将重要组件弃用

收到请回复

Java spring 阿里巴巴 面试 spring-cloud

基础到高级涵盖11个技术,Alibaba最新出品711页Java面试神册真香

收到请回复

Java 大数据 架构 编程语言 语言 & 开发

20万字的《Kafka运维实战宝典》PDF现在免费下载了

石臻臻的杂货铺

大数据 kafka

PingCAP Clinic 服务:贯穿云上云下的 TiDB 集群诊断服务

TiDB 社区干货传送门

多并发下线程创建、释放的阻塞问题

TiDB 社区干货传送门

魅族高校新生充电计划进行中,直播课让科目一新生直呼厚道

极客天地

采访22年第一批秋招上岸的同学后,我整理了这份Java面试手册

Java面试那些事儿

Java 编程 程序员 架构 面试

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