写点什么

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

评论

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

Linux之touch命令

入门小站

Linux

带你认识Flink容错机制的两大方面:作业执行和守护进程

华为云开发者联盟

flink 守护进程 容错 作业执行 Flink 容错机制

经典Android开发教程!腾讯T3团队整理,附小技巧

欢喜学安卓

android 程序员 面试 移动开发

什么是网络流量劫持?

网络安全学海

网络安全 安全 渗透测试 安全漏洞 网络攻防

星环科技边缘计算平台Sophon Edge通过EC Ready边缘服务权威评测!

星环科技

Scrum | 你需要知道这些

Python研究所

项目管理 Scrum 敏捷

JAVA原生线程池源码解析及使用建议( 程序员必看!)

Java 面试 BAT

zookeeper客户端zkclient和curator的api

赵镇

zookeeper

云小课 | 华为云KYON:网段零修改上云,简单又好用

华为云开发者联盟

KYON企业级云网络 私网NAT网关 弹性负载均衡ELB 虚拟私有云VPC L2CG VPVEP

一分钟懂5G

俞凡

5G

收藏!阿里P9耗时28天,总结出来了“618、双十一”活动高并发系统设计手册

Java 程序员 架构 面试 高并发

七种方式教你在SpringBoot初始化时搞点事情

L

Java

mysql的存储引擎知多少

卢卡多多

KV存储引擎 MySQL 数据库 6月日更

JavaScript学习(九)

空城机

JavaScript 大前端 6月日更

“动态规划”这词太吓人,其实可以叫“状态缓存”

华为云开发者联盟

Java 动态规划 超时 dp数组 状态缓存

🏆「作者推荐」【JVM原理探索】字节码指令集调用执行流程分析(语法分析篇)

码界西柚

JVM Class字节码 6月日更 字节码指令

模型化生存

俞凡

认知

在线html链接提取工具

入门小站

工具

[译] R8 优化: Switch 场景下的枚举

Antway

6月日更

华为自研PB级分布式时序数据库揭秘第一期:初识GaussDB(for Influx)

华为云数据库小助手

数据库 GaussDB(for Influx) 华为云数据库

经典永流传,华为云媒体 AI 让老电影焕发新生

华为云开发者联盟

AI 云原生 音视频 电影修复 华为云媒体

redis面试知识点和内存算法了解

AI云市场的繁盛之夏:AI花开果熟,百度抢先品尝第一口甜

脑极体

Kubernetes手记(22)- K8S包管理器

雪雷

6月日更

华为云官网前端的技术演进与低代码实践

华为云开发者联盟

大前端 低代码 可视化 页面 华为云官网

公司给的期权有没有价值?

石云升

期权 职场经验 6月日更

四份深入源码层面笔记,学完后让你彻底精通Spring Cloud!

Java架构追梦

Java 架构 面试 微服务 SpringCloud

矩阵分解推荐算法(十八)

Databri_AI

推荐算法 矩阵运算

【熬夜整理近百份大厂面经】2022校招提前批面经总结分享(腾讯、字节、阿里、百度、京东等招聘信息+必考点+简历书写)

学无止境的阿奔

c++ 程序员 面试 后端 秋招

THOR:MindSpore 自研高阶优化器源码分析和实践应用

华为云开发者联盟

网络 mindspore THOR 高阶优化器 THOR算法

Swarm云算力矿机分币系统搭建,chia矿机系统源码

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