• ES6-ES11新语法之ES11


    类的私有属性

        // # 声明私有属性,私有属性只能出现在类里面,不能出现在类外面
        class Person {
          name // 公有属性
          #age // 私有属性
          #weight
          constructor(name, age, weight) {
            this.name = name
            this.#age = age
            this.#weight = weight
          }
          intro() {
            console.log(this.name)
            console.log(this.#age)
            console.log(this.#weight)
          }
        }
    
        const girl = new Person('小红', 20, '45kg')
    
        console.log(girl) // Person {name: "小红", #age: 20, #weight: "45kg"}
        console.log(girl.name) // 小红
        // console.log(girl.#age) // Uncaught SyntaxError: Private field '#age' must be declared in an enclosing class
    
        girl.intro() // 小红 20 45kg

    Promise.allSettled()

      如果想要得到每个异步任务的运行结果,用allSettled()

      如果要求每个异步任务都成功才能继续往下执行,用all()

        const p1 = new Promise((resolve, reject) => {
          setTimeout(() => {
            resolve('商品数据-1')
          }, 500);
        })
    
        const p2 = new Promise((resolve, reject) => {
          setTimeout(() => {
            resolve('商品数据-2')
            // reject('失败了') // 这里的状态只控制p2的状态,不影响 allSettled() 的状态
          }, 500);
        })
    
        // Promise.allSettled() 接收promise组成的数组,返回成功的promise对象,得到每个promise的status
        const result = Promise.allSettled([p1, p2])
        console.log(result) // [[PromiseState]]: "fulfilled" [[PromiseResult]]: [{status: "fulfilled", value: "商品数据-1"}, {status: "fulfilled", value: "商品数据-2"}]
    
        // 有一个失败就返回失败,都成功才会返回成功,不返回每个promise的status因为都是fulfilled
        const res = Promise.all([p1, p2])
        console.log(res) //  // [[PromiseState]]: "fulfilled" [[PromiseResult]]: ["商品数据-1", "商品数据-2"]

    matchAll()

      适用于做页面内容提取,方便做爬虫类项目

        // matchAll() 获取正则批量匹配的结果
        let str = `
          <ul>
            <li>
              <a>肖生克的救赎</a>
              <p>2020-01-01</p>
            </li>
            <li>
              <a>阿甘正传</a>
              <p>2021-01-01</p>
            </li>
          </ul>
        `
        const reg = /<li>.*?<a>(.*?)</a>.*?<p>(.*?)</p>/sg
        const result = str.matchAll(reg)
        console.log(result) // 返回结果是一个可迭代对象 具有next()
    
        // 1、使用for...of遍历
        // for (let item of result) {
        //   console.log(item)
        // }
    
        // 2、使用扩展运算符展开
        const arr = [...result]
        console.log(arr)

    可选链操作符: ?.

        // 接收对象类型的参数
        function main(config) {
          // const dbHost = config && config.db && config.db.host // 原来的做法,写法比较麻烦
          const dbHost = config?.db?.host // 如果config为true,就去判断db;如果db为true,就去判断host
          console.log(dbHost)
        }
    
        main({
          db: {
            host: '1920.168.1.100',
            username: 'root'
          }
        })

    动态 import 加载

      定义 add.js:

        export function add(a, b) {
          return a + b
        }

      在入口文件中导入:

        import { add } from './add.js' // 静态导入,不管用不用,先导入进来,相对于动态导入效率较低
        console.log(add(3, 4)) // 静态引入时调用 add.js 中的 add()
    
        // import() 方法动态导入,返回结果是一个promise,成功的值是所导入的模块
        import('./add.js').then((module) => {
          console.log(module.add(3, 5))
        })

    BigInt:进行大整数运算

        // 声明BigInt:1、在数字后加上 n 2、用 BigInt() 将数字转为大整型
        console.log(100n, typeof 100n) // 100n bigint
        console.log(BigInt(100), typeof BigInt(100)) // 100n bigint
    
        // BigInt和Number的区别
        console.log(Object.prototype.toString.call(100)) // [object Number]
        console.log(Object.prototype.toString.call(100n)) // [object BigInt]
        console.log(100 == 100n) // true
        console.log(100 === BigInt(100)) // false
    
        // 不能对小数进行大整数转换
        console.log(1n)
        // console.log(1.3n) // 报错
    
        // 运算结果带小数会被自动取整
        console.log(4n / 2n) // 2n
        console.log(5n / 2n) // 2n
    
        // 一个正整数后面加上n就转换成了大整型,在数组排序中认为4n大于4,但是在逻辑上4n==4
        let arr = [4, 4n, 2, 2n, -10, -10n, -1, -1n, 0, 0n]
        console.log(fnSort(arr)) // [-10, -10n, -1, -1n, 0, 0n, 2, 2n, 4, 4n]
    
        // BigInt和String的比较
        console.log(2n) // 2n
        console.log(2n + '') // '2'
    
        // 使用场景:进行大数字的运算,运算完了再使用Number()转为数字
        let max = Number.MAX_SAFE_INTEGER // js中最大安全数值
        console.log(max) // 9007199254740991
        console.log(max.toString().length)
        console.log(max + 1) // 9007199254740992
        console.log(max + 2) // 9007199254740992 和 + 1 没有区别
    
        console.log(BigInt(max)) // 9007199254740991n
        console.log(BigInt(max) + 1n) // 9007199254740992n
        console.log(BigInt(max) + 2n) // 9007199254740993n
    
        // 冒泡排序
        function fnSort(arr) {
          for (var i = 0; i < arr.length - 1; i++) {
            for (var j = 0; j < arr.length - 1 - i; j++) {
              if (arr[j] > arr[j + 1]) {
                var temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
              }
            }
          }
          return arr;
        }

    globalThis:指向全局对象

      浏览器下指向window

        console.log(globalThis) // Window
        console.log(globalThis === window) // true

      nodejs(12+)下指向global

      

    x

  • 相关阅读:
    猿辅导-去除数组中数量大于k的数
    OSI体系结构各层协议
    京东-学生合唱队分组
    146-LRUCache
    76-最长上升子序列
    无序数组中三个数字乘积最大值
    38-字符串的排列
    35-复杂链表的复制
    208-Implement Trie(Prefix Tree)
    69-求一个整数的平方根
  • 原文地址:https://www.cnblogs.com/wuqilang/p/14046686.html
Copyright © 2020-2023  润新知