ECMAScript 2024 (ES12)的新特性总结(1),技术详细介绍

本文介绍了JavaScript中的新特性,如字符串替换函数replaceAll、处理Promise数组的Promise.any、逻辑赋值操作符??和&&||,以及弱引用WeakRef。文章还提及了提高代码可读性的下划线分隔数字法,以及前端开发者的学习资源分享。
摘要由CSDN通过智能技术生成

1、replaceAll


模式的所有匹配都会被替代项替换。模式可以是字符串或正则表达式,而替换项可以是字符串或针对每次匹配执行的函数。并返回一个全新的字符串

在没有这个特性之前,我们会这样写

const str = “student is a real student”;

const newStr = str.replace(/student/g, “hahaha”);

console.log(newStr);

有了replaceAll之后我们可以这么写了

const str = “student is a real student”;

const newStr = str.replaceAll(‘student’, “hahaha”);

console.log(newStr);

最终运行的结果都是:hahaha is a real hahaha

2、Promise.any


可以把 Promise.any 理解成 Promise.all 的相反操作。Promise.any 也可以接受一个 Promise 数组,当其中任何一个 Promise 完成(fullfill)时,就返回那个已经有完成值的 Promise。如果所有的 Promise 都拒绝(reject),则返回一个拒绝的 Promise,该 Promise 的返回值是一个 AggregateError 对象。

例如下面有三个Promise请求正常情况下:

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

setTimeout(() => resolve(“A”), Math.floor(Math.random() * 1000));

});

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

setTimeout(() => resolve(“B”), Math.floor(Math.random() * 1000));

});

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

setTimeout(() => resolve(“C”), Math.floor(Math.random() * 1000));

});

(async function () {

const result = await Promise.any([p1, p2, p3]);

console.log(result); // 输出结果可能是 “A”, “B” 或者 “C”

})();

如果存在某个Promise发生错误的情况:

const p = new Promise((resolve, reject) => reject());

try {

(async function () {

const result = await Promise.any([p]);

console.log(result);

})();

} catch (error) {

console.log(error.errors);

}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3、逻辑赋值操作符 ??=、&&=、 ||=


看下如下代码:

let a = 1;

a = a + 2;

可以简写为:

let a = 1;

a += 2;

有了这个新的标准中,逻辑表达式的操作符(&&||??)也可以简写了!

先来介绍下 ?? ,它是去年发布的标准中的新的逻辑操作符。大家可能遇到过,如果一个变量是空,需要给它赋值为一个默认值的情况。通常我们会这样写:

let num = number || 222

但是,以上的代码会有一个 bug。如果realCount的值是0,则会被当作取不到其值,会取到'无法获取'这个字符串。而如果我们使用了??,只有当操作符左边的值是null或者undefined的时候,才会取操作符右边的值:

let num = number ?? 222

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来,再来看下新标准中的逻辑运算符怎么用:

// 等同于 a = a || b

a ||= b;

// 等同于 c = c && d

c &&= d;

// 等同于 e = e ?? f

e ??= f;

4、WeakRef


WeakRef是一个 Class,一个WeakRef对象可以让你拿到一个对象的弱引用。这样,就可以不用阻止垃圾回收这个对象了。 可以使用其构造函数来创建一个WeakRef对象。

// anObject 不会因为 ref 引用了这个对象,而不会被垃圾回收

let ref = new WeakRef(anObject);

我们可以用WeakRef.prototype.deref()来取到anObject的值。但是,在被引用对象被垃圾回收之后,这个函数就会返回undefined

// 如果 someObj 被垃圾回收了,则 obj 就会是 undefined

let obj = ref.deref();

5、下划线 (_) 分隔符


当你要写一个很长的数字的时候:

let x = 233333333

数字太长会导致可读性很差。使用了数字分隔符 _ (下划线),就可以让数字读的更清晰:

let x = 2_3333_3333

// x 的值等同于 233333333,只是这样可读性更强,不用一位一位数了

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

结尾

正式学习前端大概 3 年多了,很早就想整理这个书单了,因为常常会有朋友问,前端该如何学习,学习前端该看哪些书,我就讲讲我学习的道路中看的一些书,虽然整理的书不多,但是每一本都是那种看一本就秒不绝口的感觉。

以下大部分是我看过的,或者说身边的人推荐的书籍,每一本我都有些相关的推荐语,如果你有看到更好的书欢迎推荐呀。

戳这里免费领取前端学习资料

你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)**

结尾

正式学习前端大概 3 年多了,很早就想整理这个书单了,因为常常会有朋友问,前端该如何学习,学习前端该看哪些书,我就讲讲我学习的道路中看的一些书,虽然整理的书不多,但是每一本都是那种看一本就秒不绝口的感觉。

以下大部分是我看过的,或者说身边的人推荐的书籍,每一本我都有些相关的推荐语,如果你有看到更好的书欢迎推荐呀。

戳这里免费领取前端学习资料

前端学习书籍导图-1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值