ES11新增特性

深藏阁楼爱情的钟 2022-12-30 13:38 133阅读 0赞

文章目录

      • 一、私有属性
      • 二、Promise.allSettled
            1. Promise.allSettled
            1. Promise.all
      • 三、String.prototype.matchAll
      • 四、可选链操作符 ?.
      • 五、动态 import
      • 六、大整型 BigInt
      • 七、globalThis:始终指向全局对象

一、私有属性

  1. class Person{
  2. //公有属性
  3. name;
  4. //私有属性
  5. #age;
  6. #weight;
  7. //构造方法
  8. constructor(name, age, weight){
  9. this.name = name;
  10. this.#age = age;
  11. this.#weight = weight;
  12. }
  13. }
  14. //实例化
  15. const girl = new Person('晓红', 18, '45kg');
  16. console.log(girl.name);
  17. console.log(girl.#age);
  18. console.log(girl.#weight);

在这里插入图片描述
如果我们改成下述代码,就可以打印出来了:

  1. class Person{
  2. //公有属性
  3. name;
  4. //私有属性
  5. #age;
  6. #weight;
  7. //构造方法
  8. constructor(name, age, weight){
  9. this.name = name;
  10. this.#age = age;
  11. this.#weight = weight;
  12. }
  13. intro(){
  14. console.log(this.name);
  15. console.log(this.#age);
  16. console.log(this.#weight);
  17. }
  18. }
  19. //实例化
  20. const girl = new Person('晓红', 18, '45kg');
  21. girl.intro();

在这里插入图片描述

二、Promise.allSettled

1. Promise.allSettled

接收一个promise数组,返回的结果也是一个promise对象,返回的永远是成功的状态。

  1. //声明两个promise对象
  2. const p1 = new Promise((resolve, reject)=>{
  3. setTimeout(()=>{
  4. resolve('商品数据 - 1');
  5. },1000)
  6. });
  7. const p2 = new Promise((resolve, reject)=>{
  8. setTimeout(()=>{
  9. // resolve('商品数据 - 2');
  10. reject('出错啦!');
  11. },1000)
  12. });
  13. //调用 allsettled 方法
  14. const result = Promise.allSettled([p1,p2]);
  15. console.log(result);

在这里插入图片描述

2. Promise.all

接收的也是一个promise对象,但是返回的结果要根据里面的每一个promise状态确定,如果都成功才会成功,如果有一个失败,就会失败。

  1. //声明两个promise对象
  2. const p1 = new Promise((resolve, reject)=>{
  3. setTimeout(()=>{
  4. resolve('商品数据 - 1');
  5. },1000)
  6. });
  7. const p2 = new Promise((resolve, reject)=>{
  8. setTimeout(()=>{
  9. // resolve('商品数据 - 2');
  10. reject('出错啦!');
  11. },1000)
  12. });
  13. //调用 allsettled 方法
  14. const result = Promise.all([p1,p2]);
  15. console.log(result);

在这里插入图片描述

三、String.prototype.matchAll

对数据的批量提取很方便。

  1. let str = `<ul> <li> <a>肖生克的救赎</a> <p>上映日期: 1994-09-10</p> </li> <li> <a>阿甘正传</a> <p>上映日期: 1994-07-06</p> </li> </ul>`;
  2. //声明正则
  3. const reg = /<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>/sg
  4. //调用方法
  5. const result = str.matchAll(reg);
  6. // for(let v of result){
  7. // console.log(v);
  8. // }
  9. const arr = [...result];
  10. console.log(arr);

在这里插入图片描述

四、可选链操作符 ?.

  可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish ) (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined。与函数调用一起使用时,如果给定的函数不存在,则返回 undefined。

  1. function main(config){
  2. const dbHost = config?.db?.host;
  3. console.log(dbHost);
  4. }
  5. main({
  6. db: {
  7. host:'192.168.1.100',
  8. username: 'root'
  9. },
  10. cache: {
  11. host: '192.168.1.200',
  12. username:'admin'
  13. }
  14. })

在这里插入图片描述
如果我把main()里的代码删除,即如下所示:

  1. function main(config){
  2. const dbHost = config?.db?.host;
  3. console.log(dbHost);
  4. }
  5. main()

在这里插入图片描述
这里不知道为什么,我用谷歌运行时报错,但是用火狐不报错。报错信息如下:
在这里插入图片描述

五、动态 import

import 返回的是一个 promise 对象。动态 import 写法可如下所示:
在这里插入图片描述

六、大整型 BigInt

  1. let n = 521n;
  2. console.log(n, typeof(n));

在这里插入图片描述
可以将 int 型转为 BigInt 型,但不能将 float 型转为 BigInt 型。

  1. let n = 123;
  2. console.log(BigInt(n));
  3. console.log(BigInt(1.2));

在这里插入图片描述
可以进行大数值运算,转换前不可以进行大数值计算。

  1. let max = Number.MAX_SAFE_INTEGER;
  2. console.log(max);
  3. console.log(max + 1);
  4. console.log(max + 2);
  5. console.log(BigInt(max))
  6. console.log(BigInt(max) + BigInt(1))
  7. console.log(BigInt(max) + BigInt(2))

在这里插入图片描述

七、globalThis:始终指向全局对象

  1. console.log(globalThis);

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,133人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ES11特性

    正式支持了安全的链式操作: Optional chaining:新运算符 ?. 能够在属性访问、方法调用前检查其是否存在 Nullish coalescing Ope