likes
comments
collection
share

2022年,马上都ES2022了,还只知道ES6的新特性?

作者站长头像
站长
· 阅读数 20

2022年,马上都ES2022了,还在看ES6的知识点?

面试的时候,面试官老是喜欢问一些你知道ES6的新属性有哪些吗?

实际上,ES6都是2015年出的规范了,现在都是2022年,还考试这个,未免有些落伍。

今天就带大家理一下,这些年,从ES2015(ES6)到ES2021都增加了哪些特性

一、ES2015(ES6)

新增let const用于声明变量 const a = 1 ; let b = 2

新增变量解构 let [a, b, c] = [1, 2, 3];

加强对Unicode码的支持 '\u007A' === 'z' // true

增加String的属性方法fromCodePoint、raw、codePointAt

增加了字符串的遍历器接口

for (let codePoint of 'foo') {
  console.log(codePoint)
}

增加字符串的实例方法includes()、 startsWith()、 endsWith()、repeat()、 padStart(),padEnd()、trimStart()、trimEnd() 、matchAll()、at()

修改了正则表达式的一些参数设置并新增了部分属性(太多,不详细列出来了就)

修改了函数的入参默认值的指定方式

增加了数组的解构方法(...运算符)

增加了对象的简洁写法 例如{test} 它等同于 {test:test}

增加了Set Map两个数据结构

增加Proxy构造函数(vue也是基于此做了升级)

增加Promise对象,用于解决异步编程

新增class关键字(语法糖),改变了了之前原型的书写方式

增加import export用于模块编程(之前都在用,只不过ES6之后,社区标准变成了官方标准)

当然,还有一些其它变化,相对来说用的更少一些,这里就不提了

二、ES2016(ES7)

新增数组的includes属性

引入了 运算符 (指数运算符) 示例2 3 //8

三、ES2017(ES8)

增加async await使得异步改同步成为可能,避免代码书写的来回嵌套

增加Object.values() Object.entries()

增加String padding:String.prototype.padStart、String.prototype.padEnd

允许函数参数列表结尾存在逗号

添加Object.getOwnPropertyDescriptors(): 获取一个对象的所有自身属性的描述符,如果没有任何自身属性,则返回空对象

新增SharedArrayBuffer 对象:用来表示一个通用的,固定长度的原始二进制数据缓冲区

新增Atomics 对象:提供了一组静态方法用来对 SharedArrayBuffer 对象进行原子操作

四、ES2018(ES9)

允许异步迭代:await可以和for...of循环一起使用,以串行的方式运行异步操作

添加Promise.finally()

修改了正则表达式的一些属性(这块比较细节,mdn上查一下当前怎么用就行了)

五、ES2019(ES10)

修改了try catch 的使用,catch不必再由入参

增加数组的flat flatMap方法增加字符串的trimStart, trimEnd方法,分别是去掉首尾空格增加Object.fromEntries方法,可以把对应数组转成对象增加Function.prototype.toString()方便看到函数对应的内部代码增加Symbol.prototype.description方法

示例 Symbol('test'). description === 'test' // true

对JSON对象的优化 JSON.superset 、JSON.stringify

六、ES2020(ES11)

增加Bigint用于大数计算

增加可选链 简化书写判断

增加 ?? 运算,如果左侧不为null或者undefined则返回 ??左侧内容

解决了 let num = number || 1 这种计算方式的bug

增加Promise.allSettled方法

支持import()函数用于异步加载

七、ES2021(ES12)

增加字符串的replactAll方法,之前要实现替换全部,需要使用正则表达式

增加Promise.any方法

新增了逻辑赋值操作符 ??=、&&=、 ||=

增加下划线 (_) 分隔符:使用 _ 分隔数字字面量以方便阅读 1_0000 === 10000 //true

以及WeakRefs、Intl.ListFormat、Intl.DateTimeFormat(这三个用的一般也不多,感兴趣的自行查阅)

附、

2015年6月正式发布ES6,也称为ES2015,此后的每一年都会进行部分内容进行修订并在6月发布对应年号的ES版本,比如ES2016~ES2021。ES2021是ECMAScript语言规范的第12版,也被称为ES12。以后为了避免混淆,还是按照年份来称呼吧!省的还做个转换。