一、ECMAScript简介
ECMAScript是一种由Ecma国际标准化的脚本程序设计语言,通常被称为JavaScript或JScript的标准。
二、ES6 (ES2015)
- Class: 引入了类的概念,使得在JavaScript中可以更轻松地实现面向对象编程。
- 模块化语法(import、export): 引入了模块化的语法,允许将代码分割为多个模块,以提高代码的可维护性和可重用性。
- 箭头函数: 提供了一种更简洁的函数定义方式,使得在函数式编程中编写代码更加方便。
- 函数参数默认值: 允许在函数定义时为参数设置默认值,简化了函数的使用。
- 模板字面量: 引入了反引号(``)语法,使得在字符串中插入变量和表达式更加方便。
- 解构赋值: 允许从数组或对象中提取数据,将其赋值给对应的变量,提高了代码的可读性和简洁性。
- 扩展运算符: 用三个点(...)表示,可以在数组和对象中进行扩展操作,简化了操作。
- Promise: 提供了更好的异步编程解决方案,使得在处理异步操作时代码更加清晰和可维护。
- let, const 替代 var: 引入了
let
和const
关键字,分别用于声明变量和常量,解决了var
存在的一些问题,如变量提升和作用域问题。
三、ES7 (ES2016)
- Array.prototype.includes(): 提供了一种更直观的方法来判断数组中是否包含某个值。
- 幂运算符: 引入了
**
运算符,用于进行幂运算,例如2**3
表示2的3次方。
四、ES8 (ES2017)
- async/await: 提供了更简洁的语法来处理异步操作,使得异步代码的编写更加直观和易于理解。
- Object.values(): 返回一个数组,包含对象自身的所有可枚举属性的值。
- Object.entries(): 返回一个数组,包含对象自身的所有可枚举属性的键值对。
- 字符串 padStart() & padEnd(): 允许在字符串的开头或结尾添加指定的字符串,以达到指定的长度。
- 尾随逗号: 允许在函数参数列表和数组/对象字面量的尾部使用逗号,提高了代码的可维护性。
- Object.getOwnPropertyDescriptors(): 返回对象的所有自身属性的描述符。
五、ES9 (ES2018)
- 异步迭代器: 允许在异步函数中使用
for await...of
语法进行异步迭代。 - Promise.finally(): 添加了
finally()
方法,该方法在Promise
执行完毕后无论成功与否都会执行。 - Rest, Spread: 支持在函数参数中使用剩余参数(rest)和扩展操作符(spread)。
六、ES10 (ES2019)
- 更友好的 JSON.stringify: 修复了对Unicode字符的处理,以更准确地输出Unicode字符串。
- Array.prototype.flat() & Array.prototype.flatMap(): 提供了一种简便的方式来展平嵌套数组。
- String.prototype.trimStart() & String.prototype.trimEnd(): 分别从字符串的开头和结尾移除空格。
- Object.fromEntries(): 将键值对列表转换为对象。
- String.prototype.matchAll(): 返回一个包含所有匹配结果的迭代器。
- 可选链操作符 (
?.
): 允许对可能为null
或undefined
的对象的属性进行安全访问。 - Nullish 合并运算符 (
??
): 提供了一种更安全的方式来设置默认值,只在左侧的值为null
或undefined
时生效。
七、ES11 (ES2020)
- Promise.allSettled(): 返回一组Promise的状态,不管是fulfilled还是rejected。
- 可选链操作符 (
?.
): 允许对可能为null
或undefined
的对象的属性进行安全访问。 - Nullish 合并运算符 (
??
): 提供了一种更安全的方式来设置默认值,只在左侧的值为null
或undefined
时生效。 - 动态导入: 允许在需要时动态地导入模块。
- globalThis: 提供了一个标准的方式来获取全局对象。
八、ES12 (ES2021)
- Promise.any(): 返回最快完成的Promise结果,无论成功或失败。
- 逻辑赋值运算符 (
||=
,&&=
,??=
): 提供了更简洁的逻辑赋值语法。 - WeakRefs: 允许创建对对象的弱引用,不会阻止对象被垃圾回收。
- 静态块: 提供了在类中进行静态属性初始化的机制。
九、ES13 (ES2022)
- 模块顶层作用域支持 await 表达式: 允许在模块顶层直接使用 await。
- 私有类元素: 通过
#
前缀定义的私有类元素,只能在类内部访问。 - in操作符支持私有类元素: 在类内使用
in
操作符判断私有类元素的存在。 - 新增正则
/d
标志和hasIndices
属性: 用于获取捕获组开始索引和结束索引。 - Error对象的cause属性: 提供了更多错误信息。
- 新增Strings、Arrays、TypedArrays的at方法: 支持关联访问。
评论区