每日一问---es2020

ES2020新增方法

类的私有属性


通过在变量或函数前面添加一个简单的散列符号,我们可以将它们完全保留在类内部使用。

静态方法

类相当于实例的原型,所有在类中定义的方法,都会被实例继承。
如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,
而是直接通过类来调用,这就称为“静态方法”。

静态属性

静态属性指的是 Class 本身的属性,即Class.propName,
而不是定义在实例对象(this)上的属性。

私有属性 私有方法

私有方法和私有属性,是只能在类的内部访问的方法和属性,外部不能访问。

class InnerStatic {
    // 静态属性
    static staticProps = 'string'; 
    // 静态方法
    static staticFun = ()=>{};    
    // 私有属性
    #message = 1; 
    // 私有方法
    #getMessage(){ 
        console.log('#message values', this.#message);
    }
    实例方法
    getMessage(){

    }
}
let instance = new InnerStatic();
instance.getMessage();
console.log(instance.#message) // Private name #message is not defined

无效合并操作符


因为 JavaScript 是动态类型的,所以在分配变量时需要牢记 JavaScript 对真 / 假值的处理。 如果我们有一个具有一些值的对象,有时候我们希望允许一些技术上有误的值,比如一个空字符串或者数字0。 设置默认值很快会变得烦人,因为它会覆盖应该是有效值的内容。

let person = {
  profile: {
    name: '',
    age: 0
  }
};
console.log('无效合并操作符', person.profile.name || 'Anonymous'); // Anonymous
console.log('无效合并操作符', person.profile.name ?? 'Anonymous'); // ''

可选的链接操作符


在点符号之前添加一个问号,我们可以使值的路径的任何部分可选

let person = {};

// console.log(person.profile.name ?? '');  // Cannot read property 'name' of undefined
console.log(person?.profile?.name);  // undefined

if (person?.profile?.name) {
  console.log('have name props');
} else {
  console.log('not exits name props');
}

可用于判断数据属性是否存在,不必写成冗长的 
person && person.profile && person.profile.name的格式

BigInt


通过在末尾加上字母 n 解决js中数字超过最大数值精度错误问题

const max = Number.MAX_SAFE_INTEGER;
console.log(max); // 9007199254740991
console.log(max + 1);
console.log(max + 2);
console.log(max + 3);

const bigNum = 1000000000000000000000000000000000000000000000n;

console.log(bigNum + 1n);  // 1000000000000000000000000000000000000000000001n

Dynamic Import 动态导入


如果您的文件中充满了实用函数,其中一些函数可能很少被使用,导入它们的所有依赖项可能只是浪费资源。 现在我们可以使用 async / await 在需要的时候动态导入依赖关系。

math.js

const add = (num1, num2) => num1 + num2;
export { add };

---------------------

index.js

const doMath = async (num1, num2) => {
  if (num1 && num2) {
    const math = await import('./math.js');
    console.log(math.add(5, 10));
  };
};

doMath(4, 2);

Promise.allSettled


接受一组 Promise 实例作为参数,包装成一个新的 Promise 实例。只有等到所有这些参数实例都返回结果,不管是fulfilled还是rejected,包装实例才会结束。

const p1 = new Promise((res, rej) => setTimeout(res, 1000));

const p2 = new Promise((res, rej) => setTimeout(rej, 1000));

Promise.allSettled([p1, p2]).then(data => console.log(data));

// [
//   Object { status: "fulfilled", value: undefined},
//   Object { status: "rejected", reason: undefined}
// ]

参考资料

es2020


title: 每日一问—
date: 2020-03-28
category: 技术 # 归类
tag: [‘技术’] # 标签
tagcloud: [‘技术’] # 云标签
archives: [‘技术’,’每日问题’,’web安全’] # 归档


页面字体以及格式

<div style="font-size:18px;color:#333;line-height:24px;font-family:楷体;"> </div>

问题标题

<font style="font-weight:700"></font>  <strong><strong>

引用

<font style="color:blue;"></font>

一般层级

#### ##### ######

注意事项

<font style="color:red;"></font>

加重

<font style="font-weight:700;color:#333;"></font>

Recommended Posts