# es6(es2015)
类(class)
模块化(module)
箭头函数
函数默认值
模版字符串
解构赋值
延展字符串(...)
对象属性简写
let const
let const 和 var 的对比:
- 在同一个作用域内,var 可以重复声明变量,let、const 不能重复声明同一个变量。ES5 是函数作用域,即一个函数内就是一个作用域,ES6 是块级作用域,花括号内就是一个作用域。
- var 有变量提升,可以在变量声明前使用,let、const 不存在变量提升,在变量前使用会报错
- let、const 有暂时性死区,即父作用域中有 var 定义,在块作用域中又定义了 let、const,那再 let、const 之前使用就是死区
- const 必须在声明的时候赋值;const 声明的变量不能再修改
# es7(es2016)
Array.prototype.includes()
- 指数操作符 (
**
等价于 Math.pow())
# es8 (es2017)
- async/await
- Object.values
- Object.entries
- String padding
- String.prototype.padStart
- String.prototype.padEnd
- 函数参数列表结尾允许逗号
- Object.getOwnPropertyDescriptors
- SharedArrayBuffer 对象
- Atomics 对象
# es9(es2018)
异步迭代(await for of)
async function process(array) { for await (const i of array) { doSomething(i) } }
Promise.finally()
rest/spread 属性
ES6 引入了 rest 参数和扩展运算符,三个点仅用于数组。rest 参数语法允许我们讲一个不定数量的参数表示为一个数组
正则表达式命名捕获组
正则表达式反向断言
正则表达式 dotAll 模式
正则表达式 Unicode 转译
非转译序列的模版字符串
# es10(es2019)
- 行分隔符、段分隔符
- 更有好的 JSON.stringify()
- 新增了 Array 的 flat() 和 flatMap()
- 新增了 String 的 trimStart() 和 trimEnd()
- Object.fromEntries()
- Symbol.prototype.description
- Symbol.prototype.matchAll
- Function.prototype.toString 现在返回精确字符串,包括空格和注释
- 简化
try {} catch {}
,修改 catch 绑定 - Legacy RegEx
- 私有的实例方法和访问器
# es11(es2020)
- 可选调用链
- 空值合并
- Promise.allSettled
- String.prototype.matchAll
- Dynamic import(动态导入)
- 新的基本数据类型 BigInt
- globalThis