ECMAScript 2021(ES12)新特性简介,21年Java面经分享

怎么处理呢?我们知道私有方法是可以在方法内部调用的,那么只需要创建一个公有方法,然后在这个公有方法中调用私有方法即可,如下所示:

class Student {

#getAge() {

console.log(“永远18岁”)

}

getPublicAge(){

this.#getAge();

}

}

student= new Stude

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

nt();

student.getPublicAge();

我们可以得到同样的结果。

私有属性

====

上面讲到了私有方法,那么对于私有属性是怎处理的呢?

通常,对于属性,我们可以以get修饰符来进行修饰,然后就可以直接通过属性名来访问了:

class Student {

get Age() {

return 18;

}

}

student= new Student();

console.log(student.Age);

结果我们会得到18这个输出。

同样,可以在属性名前面加上#,让其变成私有变量,如下所示:

class Student {

get #Age() {

return 18;

}

}

student= new Student();

console.log(student.Age);

上面代码将会输出undefined。

要想访问上述的私有属性,则可以用公有属性去调用私有属性方法:

class Student {

get #Age() {

return 18;

}

get publicAge() {

return this.#Age

}

}

student= new Student();

console.log(student.publicAge);

非常好用。

Promise.any() 和 AggregateError

==============================

promise.any可以返回任意一个提前resolve的结果,在现实的应用中,这种情况是非常常见的,我们来模拟一个例子:

const prom1 = new Promise((resolve, reject) => {

setTimeout(

() => resolve(“promise one”),

Math.floor(Math.random() * 100)

);

});

const prom2 = new Promise((resolve, reject) => {

setTimeout(

() => resolve(“promise two”),

Math.floor(Math.random() * 100)

);

});

const prom3 = new Promise((resolve, reject) => {

setTimeout(

() => resolve(“promise three”),

Math.floor(Math.random() * 100)

);

});

(async function() {

const result = await Promise.any([prom1, prom2, prom3]);

console.log(result);

})();

上述代码可以随机输出promise one,promise two,promise three。

如果将上述代码改成所有的都reject,那么会抛出AggregateError:

const prom1 = new Promise((resolve, reject) => {

setTimeout(

() => reject(“promise one rejected”),

Math.floor(Math.random() * 100)

);

});

const prom2 = new Promise((resolve, reject) => {

setTimeout(

() => reject(“promise two rejected”),

Math.floor(Math.random() * 100)

);

});

const prom3 = new Promise((resolve, reject) => {

setTimeout(

() => reject(“promise three rejected”),

Math.floor(Math.random() * 100)

);

});

try{

(async function() {

const result = await Promise.any([prom1, prom2, prom3]);

console.log(result);

})();

} catch(error) {

console.log(error.errors);

}

报的错如下:

Uncaught (in promise) AggregateError: No Promise in Promise.any was resolved

注意,必须是所有的promise都被reject之后才会抛出AggregateError,如果有部分成功,那么将会返回成功的结果。

数字分隔符

=====

这个新特性是为了方便程序员看代码而出现的,如果数字比较大,那么看起来就不是那么一目了然,比如下面的长数字:

const number= 123456789;

一眼看不出这个数字的体量到底是多大,所以ES12提供了数字分隔符_。

分隔符不仅可以分割十进制,也可以分割二净值或者十六净值的数据,非常好用。

const number = 1_000_000_000_000;

const binary = 0b1010_0101_1111_1101;

const hex = 0xAF_BF_C3;

上面例子分别代表了十进制,二进制和十六进制的数据,非常直观好用。

新的逻辑操作符

=======

我们知道&& 和 || 是被来进行逻辑操作的运算符。

比如:

1 && 2

1 || 2

等操作,ES12提供了&& 和||的二元操作符,如下:

var x = 1;

var y = 2;

x &&= y;

x ||= y;

另外还提供了??的二元操作符,如:

var x;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值