ES11 新特性

ES11 新特性

私有属性

私有属性只能在 class 里访问

class Person {
  // 公有属性
  name;
  // 私有属性
  #age;
  #weight;
  // 构造方法
  constructor(name, age, weight) {
    this.name = name;
    this.#age = age;
    this.#weight = weight;
  }
  showMsg() {
    console.log(this.name);
    console.log(this.#age);
    console.log(this.#weight);
  }
}

const girl = new Person("小红", 18, "165");

console.log(girl); // {name: '小红', #age: 18, #weight: '165'}
console.log(girl.name); // 小红

console.log(girl.#age); // 报错 私有属性只能在class里访问

girl.showMsg();

Promise 扩展

  • Promise.allSettled() 返回的状态总是成功的,返回值为传入 Promise 对象的结果

    // 声明一个Promise对象
    const p1 = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve("商品数据-1");
      }, 1000);
    });
    
    const p2 = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve("商品数据-2");
      }, 1000);
    });
    
    const p3 = new Promise((resolve, reject) => {
      setTimeout(() => {
        reject("失败了");
      }, 1000);
    });
    
    // Promise.allSettled() 返回的状态总是成功的,返回值为传入 Promise 对象的结果
    const result = Promise.allSettled([p1, p2]);
    console.log(result); // Promise {<fulfilled>: [ {status: 'fulfilled', value: '商品数据-1'}, {status: 'fulfilled', value: '商品数据-2'} ]}
    
    const result2 = Promise.allSettled([p1, p3]);
    console.log(result2); // Promise {<fulfilled>: [ {status: 'fulfilled', value: '商品数据-1'}, {status: 'rejected', reason: '失败了'} ]}
    
  • Promise.all() 返回值 一假便假 值为失败 Promise 对象的值

    // 声明一个Promise对象
    const p1 = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve("商品数据-1");
      }, 1000);
    });
    
    const p2 = new Promise((resolve, reject) => {
      setTimeout(() => {
        reject("失败了");
      }, 1000);
    });
    
    // Promise.all() 返回值 一假便假 值为失败Promise对象的值
    const result = Promise.all([p1, p2]);
    console.log(result); // {<rejected>: 失败了}
    

字符串扩展

  • matchAll 批量提取数据

    let str = `
        <ul>
          <li>
            <a>肖申克的救赎</a>
            <p>上映日期:1994-09-10</p>
          </li>
          <li>
            <a>阿甘正传</a>
            <p>上映日期:1994-07-06</p>
          </li>
        </ul>
      `;
    
    // 声明正则
    const reg = /<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>/gs;
    const result = str.matchAll(reg);
    
    /* for (v of result) {
      console.log(v[1]); // 肖申克的救赎            阿甘正传
      console.log(v[2]); // 上映日期:1994-09-10   上映日期:1994-07-06
    } */
    
    const res = [...result];
    console.log(res); // [Array(3), Array(3)]
    

可选链操作符

function main(config) {
  // 需要层层判断 否则如果不传参数会报错
  const dbHost = config && config.db && config.db.host;

  console.log(dbHost); // localhost
}

main({
  db: {
    host: "localhost",
    username: "root",
  },
  catch: {
    host: "localhost",
    username: "root",
  },
});
  • ?. 可选链操作符 - 判断前一个参数是否存在

    function main(config) {
      const dbHost = config?.db?.host;
    
      console.log(dbHost); // localhost
    }
    
    main({
      db: {
        host: "localhost",
        username: "root",
      },
      catch: {
        host: "localhost",
        username: "root",
      },
    });
    

动态 import

  • 全局引入

    import * as m1 from "./hello.js";
    
    const btn = document.getElementById("btn");
    
    btn.onclick = function () {
      m1.showHello();
    };
    
  • 动态引入 - 提升加载效率

    const btn = document.getElementById("btn");
    
    btn.onclick = function () {
      import("./hello.js").then((module) => {
        module.showHello();
      });
    };
    

BigInt 大整型

  • 大整形

    let n = 521n;
    console.log(n); // 521n
    
  • 函数

    let n = 123;
    console.log(n); // 123
    console.log(BigInt(n)); // 123n
    
  • 大数值运算

    let max = Number.MAX_SAFE_INTEGER;
    console.log(max); // 9007199254740991
    console.log(max + 1); // 9007199254740992
    console.log(max + 2); // 9007199254740992
    
    console.log(BigInt(max)); // 9007199254741n
    console.log(BigInt(max) + BigInt(1)); // 9007199254742n
    console.log(BigInt(max) + BigInt(2)); // 9007199254743n
    

globalThis 绝对全局对象

globalThis 始终指向 Window

console.log(globalThis); // Window对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值