只懂ES6是不够的,随着版本的不断更新,我们需要了解,掌握的就需要更多,然而头发更少...话不多说直接上笔记!!
一. ES7 新特性
- Array.prototype.includes 判断数组中是否包含某元素,语法:arr.includes(元素值);
Includes 方法用来检测数组中是否包含某个元素,返回布尔类型值;判断数组中是否包含某元素,语法:arr.includes(元素值);
- 指数操作符 幂运算的简化写法,例如:2的10次方:2**10;
在 ES7 中引入指数运算符「**」,用来实现幂运算,功能与 Math.pow 结果相同;
二.ES8 新特性
(1).async 和 await:
async 和 await 两种语法结合可以让异步代码看起来像同步代码一样; async 函数:
- async 函数的返回值为 promise 对象;
- promise 对象的结果由 async 函数执行的返回值决定; await 表达式:
- await 必须写在 async 函数中;
- await 右侧的表达式一般为 promise 对象;
- await 返回的是 promise 成功的值;
- await 的 promise 失败了, 就会抛出异常, 需要通过 try...catch 捕获处理; (2).对象方法扩展 Object.values、Object.entries和 Object.getOwnPropertyDescriptors:
- Object.values()方法:返回一个给定对象的所有可枚举属性值的数组;
- Object.entries()方法:返回一个给定对象自身可遍历属性 [key,value] 的数组;
- Object.getOwnPropertyDescriptors()该方法:返回指定对象所有自身属性的描述对象;
三.ECMASript 9 新特性
(1).Rest 参数与 spread 扩展运算符
Rest 参数与 spread 扩展运算符在 ES6 中已经引入,不过 ES6 中只针对于数组,在 ES9 中为对象提供了像数组一样的 rest 参数和扩展运算符;
function connect({host,port, ...user}) {
console.log(host);
console.log(port);
console.log(user);
}
connect({
host: '127.0.0.1',
port: 3306,
username: 'root',
password: 'root',
type: 'master'
});
(2).正则扩展:命名捕获分组
ES9 允许命名捕获组使用符号『?』,这样获取捕获结果可读性更强
// 正则扩展:命名捕获分组
// 声明一个字符串
let str = '<a href="http://www.baidu.com">叻叻白</a>';
// 需求:提取url和标签内文本
// 之前的写法
const reg = /<a href="(.*)">(.*)<\/a>/;
// 执行
const result = reg.exec(str);
console.log(result);
// 结果是一个数组,第一个元素是所匹配的所有字符串
// 第二个元素是第一个(.*)匹配到的字符串
// 第三个元素是第二个(.*)匹配到的字符串
// 我们将此称之为捕获
console.log(result[1]);
console.log(result[2]);
// 命名捕获分组
const reg1 = /<a href="(?<url>.*)">(?<text>.*)<\/a>/;
const result1 = reg1.exec(str);
console.log(result1);
// 这里的结果多了一个groups
// groups:
// text:"叻叻白"
// url:"http://www.baidu.com"
console.log(result1.groups.url);
console.log(result1.groups.text);
(3).正则扩展:反向断言
ES9 支持反向断言,通过对匹配结果前面的内容进行判断,对匹配进行筛选; (4).正则扩展:dotAll 模式 正则表达式中点.匹配除回车外的任何单字符,标记『s』改变这种行为,允许行终止符出现;
四.ES10 新特性
(1).Object.fromEntries
将二维数组或者map转换成对象;之前学的Object.entries是将对象转换成二维数组; (2).trimStart 和 trimEnd 去掉字符串前后的空白字符; (3).Symbol.prototype.description 获取Symbol的描述字符串
let s = Symbol("叻叻白");
console.log(s.description)
五.ES11 新特性
(1).String.prototype.matchAll
用来得到正则批量匹配的结果; (2).类的私有属性 私有属性外部不可访问直接; (3).Promise.allSettled 获取多个promise执行的结果集; (4).可选链操作符 如果存在则往下走,省略对对象是否传入的层层判断;
// 可选链操作符
// ?.
function main(config){
// 传统写法
// const dbHost = config && config.db && config.db.host;
// 可选链操作符写法
const dbHost = config?.db?.host;
console.log(dbHost);
}
main({
db:{
host:"192.168.1.100",
username:"root"
},
cache:{
host:"192.168.1.200",
username:"admin"
}
});
(5).动态 import 导入
动态导入模块,什么时候使用时候导入;
(6).BigInt
更大的整数; (7).globalThis 对象 始终指向全局对象window;