ECMAScript 2020需要知道的功能(动态导入;空值合并运算符;可选链运算符;Promise.AllSettled)

一:动态导入

其中之一是我们可以使用async / await动态导入依赖项。这意味着我们不必先导入所有内容,并且仅在需要它们时才可以导入依赖项。结果,通过在运行时加载模块来提高应用程序的性能。

示例:

if (calculations) {
    const calculator = await import('./calculator.js');
    const result = calculator.add(num1, num2);

    console.log(result);
}

在上面的代码片段中,您可以看到我们仅在要执行计算时才导入计算器模块。因此,我们不会通过在运行时之前加载所有代码来不必要地降低应用程序的速度。因此,动态导入是一个方便的补充。

二:空值合并运算符

“空值合并运算符(??)是一种逻辑运算符,当其左侧操作数为null或未定义时,将返回其右侧操作数,否则将返回其左侧操作数。

示例:

let score = 0;
let pass = score ?? 60;

console.log(pass);//0

||与??的区别是,||只会返回真实的值,当score为0,它会返回60,而??相对来说跟严谨一些。

三:可选链运算符 

有一个嵌套多层的对象,例如:
 let obj =  {
    attr: {
        name: '王二小'
    }
 }
获取name的值 
let n_val = obj.attr.name
如果这样直接获取可能会报错,导致程序异常,所以我们需要对 obj 、attr此次验证
即: let n_val = obj && obj.attr && obj.attr.name  

简化上述代码的方法,即是可选链操作符,代码如下:

let n_val = obj?.attr?.name

四:Promise.AllSettled

 新方法Promise.allSettled()等待所有诺言得到兑现。就是说,它需要一组Promises,并且只有在诺言被兑现(被拒绝或解决)时才返回。

示例:

const promise1 = Promise.resolve(5);
const promise2 = Promise.reject("Reject promise");
const promises = [promise1, promise2];

Promise.allSettled(promises)
    .then(results => console.log(`Here are are your promises results`, results))
    .catch(err => console.log(`Catch ${err}`));

上面的代码返回一个对象数组,每个对象代表一个Promise。如果实现了承诺,则对象具有状态和值;如果拒绝了承诺,则对象具有状态和原因。因此,Promise.AllSettled当您要完成所有承诺时,无论是否被拒绝或履行,它都非常有用。

五:私有变量

制作私有变量所需要做的就是在变量前面添加哈希符号。例如,#firstName是一个私有变量,不能在类外部访问。尝试在类外部调用该变量会导致SyntaxError。

class Person {
  #firstName = "Catalin";
  getFirstName() 
  { 
      console.log(this.#firstName) 
   }
}

const person1 = new Person();
person1.getFirstName() // "Catalin"

console.log(person1.firstName); // Returns "undefined"
console.log(person1.#firstName); // Returns "Uncaught SyntaxError: Private field '#firstName' must be declared in an enclosing class"

在上面的代码中,您可以看到一个私有类变量在起作用。尝试firstName在类外访问变量,我们收到一个错误。因此,当我们不想在类外公开数据时,添加便很方便。

ES6中Class类的详解:https://blog.csdn.net/fu983531588/article/details/89499461

猜你喜欢

转载自blog.csdn.net/baidu_39043816/article/details/108578506