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。以后为了避免混淆,还是按照年份来称呼吧!省的还做个转换。