ES6 (ES2015)
除了 IE,主流浏览器都已支持。
- 声明:let、const
- 块级作用域
- 解构赋值
- 数组、对象、字符串(转换成类数组对象)、数值和布尔值(转换成对象{toString})、函数参数
- 可以设置默认值(当值 === undefined 时,使用默认值):const {a = 1} = {b: 2}
- 可以自定义变量名:const {a: c} = {a: 1, b: 2}
- 字符串扩展
- 允许采用 \uxxxx 形式表示一个字符
- 可使用 for…of… 遍历
- 模板字符串``
- 标签模板:函数调用的一种特殊形式,“标签”指的是函数,紧跟在后的模板字符串是函数的参数,例如:
tagHello ${ a + b } world ${ a * b }` 等同于tag([‘Hello ‘, ‘ world ‘, ‘’], 15, 50)` - String.raw():返回把字符串所有变量替换且对斜杠进行转义的结果。
foo${1 + 2}bar等同于String.raw({ raw: ['foo', 'bar'] }, 1 + 2) - String.fromCodePoint():返回码点对应字符。和 fromCharCode 相比可以识别大于 0xFFFF 的码点,例如
String.fromCodePoint(0x20BB7); // "𠮷" - codePointAt():返回字符对应码点(String.fromCodePoint()的逆操作)。例如
var s = "𠮷";s.charCodeAt(0) // 55362 - normalize():把字符的不同表示方法统一为同样形式,返回新字符串(Unicode正规化)
- repeat():把字符串重复n次,返回新字符串
- matchAll():返回正则表达式在字符串的所有匹配
- includes():是否存在指定字符串
- startsWith():是否存在字符串头部指定字符串
- endsWith():是否存在字符串尾部指定字符串
- Number 扩展
- 二进制表示法:0b或0B开头表示二进制(0bXX或0BXX),例如
0b111110111 === 503 - 八进制表示法:0o或0O开头表示二进制(0oXX或0OXX),例如
0o767 === 503 - Number.EPSILON:数值最小精度
- Number.MIN_SAFE_INTEGER:最小安全数值(-2^53)
- Number.MAX_SAFE_INTEGER:最大安全数值(2^53)
- Number.parseInt():返回转换值的整数部分,parseInt 由全局改为绑到 Number 上
- Number.parseFloat():返回转换值的浮点数部分,parseFloat 由全局改为绑到 Number 上
- Number.isFinite():是否为有限数值
- Number.isNaN():是否为NaN
- Number.isInteger():是否为整数
- Number.isSafeInteger():是否在数值安全范围内
- Math.trunc():返回数值整数部分
- Math.sign():返回数值类型(正数1、负数-1、零0)
- Math.cbrt():返回数值立方根
- Math.clz32():返回数值的32位无符号整数形式
- Math.imul():返回两个数值相乘
- Math.fround():返回数值的32位单精度浮点数形式
- Math.hypot():返回所有数值平方和的平方根
- Math.expm1():返回e^n - 1
- Math.log1p():返回1 + n的自然对数(Math.log(1 + n))
- Math.log10():返回以10为底的n的对数
- Math.log2():返回以2为底的n的对数
- Math.sinh():返回n的双曲正弦
- Math.cosh():返回n的双曲余弦
- Math.tanh():返回n的双曲正切
- Math.asinh():返回n的反双曲正弦
- Math.acosh():返回n的反双曲余弦
- Math.atanh():返回n的反双曲正切
- 二进制表示法:0b或0B开头表示二进制(0bXX或0BXX),例如
- 对象扩展
- 简洁表示法:对象的属性和方法(
{ prop, method(){} }) - 属性名表达式:
const propKey = 'name'; const a = {[propKey]: 'xxxx'}; // {name: 'xxxx'} - method 的 name 属性:
const person = {sayName() {}}; person.sayName.name; // "sayName"- getter/setter:
const descriptor = Object.getOwnPropertyDescriptor(obj, 'foo'); descriptor.get.name // "get foo" - bind:
const func = orignFn.bind(null); func.name; // "bound originFn" - Function 构造函数:
(new Function()).name // "anonymous"
- 属性的可枚举性和遍历:描述对象 descriptor 的 enumerable
- super 关键字:指向原型对象,只能用于对象的简洁表示的方法 method 中
- Object.is:严格比较,与 === 相比,
Object.is(+0, -0); // falseObject.is(NaN, NaN); // true - Object.assign: 浅拷贝
- proto,Object.getPrototypeOf,Object.setPrototypeOf:返回或设置对象的原型对象(建议使用 Object.getPrototypeOf,Object.setPrototypeOf,Object.create 来返回/设置对象的原型对象)
- 简洁表示法:对象的属性和方法(
- 数组扩展
- 扩展运算符:… (扩展运算符背后调用的是遍历器接口(Symbol.iterator))
- Array.from:转换具有 Iterator 接口的数据结构为真正数组,返回新数组
- 类数组对象:包含 length 的对象、Arguments 对象、NodeList 对象
- 可遍历对象:String、Set 结构、Map 结构、Generator 函数
- Array.of:将一组值转换为数组
- copyWithin:
[1, 2, 3, 4, 5].copyWithin(0, 3) // [4, 5, 3, 4, 5];从3位开始到末尾的值复制到从0开始的位置 - find 和 findIndex:查找
- fill:用指定值填充数组,返回原数组
- keys、values、entries:遍历
- 数组的空位
- Class 类
- 实质上是 JavaScript 现有的基于原型的继承的语法糖
- class、extends、constructor、super、get/set、static、public fields
- Module 模块
- import、export
- 编译时加载/静态加载;import/export 命令只能放在模块顶层,不能放在代码块中(例如 if 条件语句代码块中、函数中)
ES7 (ES2016)
- 数组扩展
- includes:数组是否包含给定的值
ES8 (ES2017)
- 字符串扩展
- 字符串补全长度:padStart、padEnd
- 对象扩展
- Object.getOwnPropertyDescriptors:返回对象所有自身属性的描述对象 descriptor
- Object.values:返回对象所有 enumerable 属性的 value 组成的数组
- Object.entries:返回对象所有enumerable 属性的 [key, value] 组成的数组
ES9 (ES2018)
- 对象扩展
- 扩展运算符:…
ES10 (ES2019)
- 字符串扩展
- 允许 JavaScript 字符串直接输入 U+2028(行分隔符)和 U+2029(段分隔符),例如代码
const PS = eval("'\u2029'");不会报错 - JSON.stringify:如果遇到 0xD800 到 0xDFFF 之间的单个码点,或者不存在的配对形式,会返回转义字符串,
JSON.stringify('\u{D834}') // ""\\uD834"",JSON.stringify('\uDF06\uD834') // ""\\udf06\\ud834""
- 允许 JavaScript 字符串直接输入 U+2028(行分隔符)和 U+2029(段分隔符),例如代码
- 对象扩展
- Object.fromEntries:Object.entries 的逆向操作
ES11 (ES2020)
- 数值扩展
- BigInt
- Module 模块
- 添加复合写法 export * as ns from ‘mod’;
- 动态导入 import()
- 可在任何地方使用(运行到这句时再加载模块)
- 与 import 语句(静态加载)不同,可以使用表达式,例如
import(../${modVar}.js) - 返回 Promise:import().then()
