ES6
类
1 | //类 |
模块化
ES6允许在一个模块中使用export来导出多个变量或函数。
1 | // 导出 |
箭头函数
注意this
1 | (() => 1) |
设置默认值
1 | ((a, b = 10) => a + b) |
模板字符串
1 | let str = `name is ${name}`; |
解构
1 | let foo = ["one", "two", "three", "four"]; |
延展操作符
1 | let arr1 = [0, 1, 2], |
对象属性简写
1 | const t1 = 'hello', t2 = 2; |
Promise
1 | let waitSecond = new Promise((resolve, reject) => { |
let 和 const
ES7
Array.prototype.includes()
1 | let arr = [6, 2, 5]; |
幂指数运算
1 | console.log(2 ** 10); // 1024 |
ES8
async await
1 | async function process(array) { |
Object.values()
1 | const obj = { |
Object.entries()
1 | for (let [key, value] of Object.entries(obj)) { |
String padding
1 | // String.prototype.padStart |
函数参数列表结尾允许逗号
Object.getOwnPropertyDescriptors()
用来获取一个对象的所有自身属性的描述符,如果没有任何自身属性,则返回空对象。
1 | const obj2 = { |
SharedArrayBuffer对象
SharedArrayBuffer 对象用来表示一个通用的,固定长度的原始二进制数据缓冲区,类似于 ArrayBuffer 对象,它们都可以用来在共享内存(shared memory)上创建视图。与 ArrayBuffer 不同的是,SharedArrayBuffer 不能被分离。
Atomics对象
详见 MDN
ES9
异步迭代
1 | const fun = async (arr) => { |
Promise.finally()
finally()允许你指定最终的逻辑
Rest/Spread 属性
可以使用扩展运算符拷贝一个对象,像是这样 obj2 = {…obj1},但是 这只是一个对象的浅拷贝。另外,如果一个对象A的属性是对象B,那么在克隆后的对象cloneB中,该属性指向对象B。
正则表达式命名捕获组
1 | const reDate = /(?<year>[0-9]{4})-(?<month>[0-9]{2})-(?<day>[0-9]{2})/, |
正则表达式反向断言
1 | // 肯定反向断言 |
正则表达式dotAll模式
1 | console.log(/hello.world/.test('hello\nworld')); // false |
正则表达式 Unicode 转义
此特性可以避免使用特定 Unicode 区间来进行内容类型判断,提升可读性和可维护性.
1 | const reGreekSymbol = /\p{Script=Greek}/u; |
非转义序列的模板字符串
ES10
行分隔符(U + 2028)和段分隔符(U + 2029)符号现在允许在字符串文字中,与JSON匹配
以前,这些符号在字符串文字中被视为行终止符,因此使用它们会导致SyntaxError异常。
更加友好的 JSON.stringify
如果输入 Unicode 格式但是超出范围的字符,在原先JSON.stringify返回格式错误的Unicode字符串。现在实现了一个改变JSON.stringify的第3阶段提案,因此它为其输出转义序列,使其成为有效Unicode(并以UTF-8表示)
Array的 flat()方法和 flatMap()方法
node -v >= 11
1 | /* |
trimStart()方法和 trimEnd()方法
1 | let str = ' 123 '; |
Object.fromEntries() (node -v >= 12)
Object.fromEntries() 是 Object.entries() 的反转。
1 | const entries = new Map([ |
Symbol.prototype.description()
node 暂未实现
String.prototype.matchAll
方法返回一个包含所有匹配正则表达式及分组捕获结果的迭代器。
1 | const str1 = 'table football, foot'; |
Function.prototype.toString()现在返回精确字符,包括空格和注释
修改 catch 绑定,catch可无参数
node暂未实现
1 | /* |
新的基本数据类型 BigInt
node -v >= 10.4
更多详见 MDN
1 | const theBiggestInt = 9007199254740991n; |
globalThis 可以获取全局对象。
node -v >= 12
1 | (function () { |