ECMAScript新特性汇总
# 概述
本文会持续更新,汇总了自ECMAScript 2016 版本,即ES7开始的所有版本的新特性。
# ECMAScript版本
# ES2016(ES7)
ES7只有两个新特性
Array.prototype.includes
:用于判断数组是否存在某元素**
:指数运算符
# includes
includes
方法会遍历数组(从索引0开始逐个检查,直到找到目标值或搜索完整个数组,如果存在该元素,则返回true
,否则返回false
。
includes
的时间复杂度平均情况为O(n),其中n为数组长度。
# 对比JS其他搜索方法
方法 | 时间复杂度 | 是否提前终止 | 适用场景 |
---|---|---|---|
includes | O(n) | 是 | 检查值是否存在 |
indexOf | O(n) | 是 | 获取值的索引 |
find | O(n) | 是 | 复杂条件搜索 |
some | O(n) | 是 | 条件匹配(返回布尔值) |
Set.has | O(1) | 是 | 检查值是否存在 |
因此对于高频搜索或者是大数据量搜索,建议先将数组转为Set
,再使用Set.has
方法。
# 注意事项
includes
方法可以查找NaN
,而indexOf
和indexOf
方法不能查找NaN
。includes
方法是不区分+0
和-0
# 浏览器兼容性

# **
**
运算符用于指数运算,即返回底数的指数次幂。比如x**y
和Math.pow(x,y)
是等价的
# 浏览器兼容性

# ES2017(ES8)
ES8 新增了一些新特性,比如:
Object.values
:返回对象所有属性值value
的数组Object.entries
:返回对象所有属性键值对[key,value]
的数组Object.getOwnPropertyDescriptors
:返回对象所有属性的描述符String.prototype.padStart
和String.prototype.padEnd
:用于字符串补全async/await
:异步编程的新方式SharedArrayBuffer
:共享内存的新方式Atomics
:原子操作的新方式
# Object
方面
Object.values
和Object.entries
中返回的数组顺序都是以与for in
循环所提供顺序相同,
# 浏览器兼容性


Object.getOwnPropertyDescriptors
方法会返回指定对象的所有属性描述符,对象自身的属性描述符是直接在对象上定义的,不会从对象的原型继承。
# 浏览器兼容性

# String
方面
padStart
和padEnd
方法用于从前或从后补全字符串,会返回补全后的新字符串,不会改变原字符串。其语法如下:
padStart(targetLength, padString)
padEnd(targetLength, padString)
1
2
2
targetLength
:
- 目标长度,即补全后的字符串长度
- 如果目标长度小于等于当前字符串长度,返回当前字符串
padString
:
- 补全字符串,默认使用空格补全
- 如果
padString
长度大于目标长度,会截取超出部分
# 浏览器兼容性

# async
和await
async
和await
就是异步编程的语法糖,可以使异步代码看起来像同步代码一样。
# 浏览器兼容性


# SharedArrayBuffer
对象
SharedArrayBuffer
是一种新的内存模型,用于在多个线程之间共享内存。该模型通常用来表示一个通用的,固定长度的原始二进制数据缓冲区,但是其不能被分离。
# 浏览器兼容性

# Atomics
对象
共享内存能被同时创建和更新于工作线程或主线程。
Atomics
对象提供了一组静态方法,用于在SharedArrayBuffer
对象上执行原子操作。Atomics
对象不是构造函数,因此不能使用new
运算符,也不能当做函数直接调用。其所有属性和方法都是静态的,类似与Math
对象。
# 浏览器兼容性

# ES2018(ES9)
# ES9聚焦于异步编程、正则表达式和对象操作的标准化。新增的特性如下:
# ES2019
# ES2020
# ES2021
# ES2022
编辑 (opens new window)
上次更新: 2025/07/14, 09:14:18