ES6 新特性 新版本, 知识点汇总,让我们不再秃头

444 阅读3分钟

只懂ES6是不够的,随着版本的不断更新,我们需要了解,掌握的就需要更多,然而头发更少...话不多说直接上笔记!!

image.png

一. ES7 新特性

  1. Array.prototype.includes 判断数组中是否包含某元素,语法:arr.includes(元素值);

Includes 方法用来检测数组中是否包含某个元素,返回布尔类型值;判断数组中是否包含某元素,语法:arr.includes(元素值); image.png

  1. 指数操作符 幂运算的简化写法,例如:2的10次方:2**10;

在 ES7 中引入指数运算符「**」,用来实现幂运算,功能与 Math.pow 结果相同;

二.ES8 新特性

(1).async 和 await:

async 和 await 两种语法结合可以让异步代码看起来像同步代码一样; async 函数:

  1. async 函数的返回值为 promise 对象;
  2. promise 对象的结果由 async 函数执行的返回值决定; await 表达式:
  3. await 必须写在 async 函数中;
  4. await 右侧的表达式一般为 promise 对象;
  5. await 返回的是 promise 成功的值;
  6. await 的 promise 失败了, 就会抛出异常, 需要通过 try...catch 捕获处理; (2).对象方法扩展 Object.values、Object.entries和 Object.getOwnPropertyDescriptors:
  7. Object.values()方法:返回一个给定对象的所有可枚举属性值的数组;
  8. Object.entries()方法:返回一个给定对象自身可遍历属性 [key,value] 的数组;
  9. 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'
});

image.png (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』改变这种行为,允许行终止符出现;

image.png

四.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 导入

动态导入模块,什么时候使用时候导入;

image.png

image.png (6).BigInt

更大的整数; (7).globalThis 对象 始终指向全局对象window;