ES2016、ES2017、ES2018、ES2019、ES2020 新特性概览

目录
[隐藏]

ES2016(ES7)

  • Array.prototype.includes
  • 指数运算符 **

ES2017(ES8)

  • ''.padStart''.padEnd
  • Object.values
  • Object.entries
  • Object.getOwnPropertyDescriptors()
  • 函数参数列表和调用中的尾随逗号
  • Async Functions 异步函数 Async/Await
  • 共享内存 和 Atomics

ES2018(ES9)

  • rest / spread 属性允许将对象的剩余属性收集到新对象中: const {x, ...y} = data
  • 异步迭代for-await-offor await (const line of readLines(filePath)) console.log(line)
  • Promise.prototype.finally
  • 移除对“在‘带标签的模版字面量’中使用非法转义序列”的限制
  • 正则表达式
    • ?= 先行断言(lookahead):/test(?=\d)/.test('test1') => true
    • ?! 先行断言逆操作:/test(?!\d)/.test('test1') => false
    • ?<= 后行断言(lookbehind):/(?<=Roger) Waters/.test('Roger Waters') => true
    • ?<! 后行断言逆操作:/(?<!Roger) Waters/.test('Roger Waters') => false
    • 命名捕获组: const result = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/.test('2018-01-01') => result.groups.year
    • s 标志 single line,使 . 符号可以匹配新行:/hi.+tom/s.test('hi,\ntom') => true
    • 使用 Unicode 属性转义 \p{…}\P{…} 扩展 Unicode 匹配范围:
    • /^\p{ASCII}+$/u.test('ABC&#x1f643;') => false
    • /^\p{Emoji}+$/u.test('&#x1f643;&#x1f643;') => true
    • /^\p{ASCII_Hex_Digit}+$/u.test('0123456789ABCDEF') => true
    • /^\p{Uppercase}$/u.test('H') => true
    • /^\p{Lowercase}$/u.test('h') => true
    • /^\p{Script=Latin}+$/u.test('hey') => true

ES2019(ES10)

  • JSON 成为 ECMAScript 的完全子集:在以前,行分隔符(\u2028)和段分隔符(\u2029)会导致 JSON.parse 抛出语法错误异常
  • JSON.stringify改进,对于超出 Unicode 范围的转义序列,JSON.stringify() 会输出未知字符:JSON.stringify('\uDEAD'); // '"�"'
  • Function.prototpye.toString() 返回函数定义的内容,包括注释、空格等完整信息
  • 增加 Array.prorptype.flatArray.prorptype.flatMap
  • 增加 String.prototype.trimStartString.prototype.trimEnd
  • 增加 Object.fromEntries()
  • Symbol.prototype.description输出 Symbol 描述: const a = Symbol('lzwme'); console.log(a.description); // lzwme
  • 可选的 catch 绑定(Catch Binding):try {} catch {}
  • Array.prototype.sort() 使用稳定的排序算法

ES2020

  • 变量名前加 # 定义类私有变量
  • 增加 Promise.allSettled
  • ? 可选链运算符:var age = user?.info?.getAge?.()
  • ?? 空值合并运算符:var age = user?.age ?? 18
  • Dynamic Import 动态导入: import('./b.js').then
  • globalThis 提供一种标准化方式访问全局对象
  • BigInt安全的进行大数整型计算:var bigIntNum = 9007199254740993n; var bigIntNum = BigInt(9007199254740);
  • String.prototype.matchAll

更多参考

  • https://github.com/tc39/
点赞 (0)

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据