有什么新ES2021吗?

保持更新的2021年即将到来的JavaScript功能

- - -

图片由Ekaterina舍甫琴科Unsplash

自2015年以来,JavaScript已经收到每年不断的更新与添加新特性。尽管ES2021 / ES12明年将被释放,我们可以看一看,因为很多功能已经达到第四阶段(完成)规范并将包括在规范。在这篇文章中,我将讨论的功能已经达到4级,被添加到Google Chrome V8引擎。

String.prototype.replaceAll

String.prototype.replace现有的方法允许我们用别的东西代替字符串中的一个模式。在此方法中,有一件事要记住,当我们替换模式中,只有第一次出现的模式的字符串将被取代。替换所有的事件中,我们使用正则表达式达到相同的。

const str = '我爱Javascript和Javascript是太棒了!”;
str.replace (“Javascript”、“编码”);
/ /“我爱编码和Javascript是令人敬畏的!”
/ /备用解决方案来取代所有出现
str.replace (/ Javascript / g,“编码”);
/ /“我爱编码和编码棒极了!”

这么多年没有像replaceAll方法,取代所有的事件不使用正则表达式。在ES2021,介绍了这种新方法克服这个障碍。

const str = '我爱Javascript和Javascript是太棒了!”;
str.replaceAll (“Javascript”、“编码”);
/ /“我爱编码和编码棒极了!”

Promise.any

Promise.any ()方法接受承诺的列表,并返回一个值,就会从列表中第一个承诺解决。如果所有的承诺都拒绝就会抛出AggregatedError消息。

Promise.any(承诺),然后(
(第一次)= > {
/ /任何承诺的实现。
},
(错误)= > {
/ /所有的承诺都是拒绝。
}
);

这个方法是不同的Promise.race因为比赛短路,承诺当一个给定的承诺解决了拒绝,但这解决如果任何承诺的实现,只有拒绝所有承诺是拒绝。

这里有一个例子证明一样的:

Promise.any ([新的承诺((决心,拒绝)= > setTimeout(200年拒绝,“一个”)),新的承诺((决心,拒绝)= > setTimeout(1000年解决,“两”)),新的承诺((决心,拒绝)= > setTimeout(2000年解决,“三”))])不要犹豫((价值)= >控制台。日志(“结果- $ {value}”)).catch ((err) = > console.log (err));
/ /输出
/ /——两个结果

逻辑赋值操作符

逻辑赋值运算符组合逻辑操作(& &,| |? ?赋值运算符。

1。逻辑赋值运算符& &操作符

& & = b将返回b如果两个一个b真相,或者它会返回吗一个。换句话说,它给韩RHS变量值变量,只有lh值是真相。

例子:

让= 1;
让b = 2;
& & = b/ /或& & (a = b)/ /或如果(){
a = b
}
/ /输出
/ / 2

2。逻辑赋值运算符与| |运算符

一个| | = b将返回一个如果一个是真相,或者它会返回吗b。换句话说,它给韩RHS变量值变量,只有falsy lh值。

例子:

让一个;
让b = 2;
一个| | = b/ /或一个| | (a = b)/ /或如果(!){
a = b
}
/ /输出
/ / 2

3所示。逻辑赋值运算符? ?操作符

? ?也被称为什么Nullish合并如果该值为运营商,检查未定义的一个? ?= b将返回b如果一个未定义的,或者它会返回b。换句话说,它给韩RHS变量值变量,只有lh值未定义的

例子:

让一个;
让b = 2;
一个? ?= b/ /或一个? ?(a = b)/ /或如果(!){
a = b
}
/ /输出
/ / 2

数字分隔符

数字分隔符就能很容易地读数值通过使用吗_角色分离组数字。

rs = 1 _00_000;
/ / 100000

这就像使用表示,因为它会更容易开发人员阅读代码。

WeakRefs

WeakRef代表弱引用。弱引用的主要用途是实现缓存

JavaScript是一种垃圾收集语言以来,如果一个变量不再是可获得的,GC自动删除它。作为一个很好的实践,我们不会想要在内存中很长一段时间。我们可以允许内存垃圾收集之后如果我们需要它,我们可以生成一个新的缓存。

例子:

/ /回调函数
const调= ()= > {
const obj = {
名称:“Harsha”
};
console.log (obj);
}
/ / IIFE函数打印对象3秒后
(异步函数(){
等待新的承诺((解决)= > {
setTimeout (() = > {
回调();/ /{名称:“Harsha”}
解决();
},3000);
});
})();

上面的例子似乎复杂。但是,它实际上是简单的。代码基本上3秒后调用回调函数,函数打印对象的地方。当我们调用回调函数,obj仍然存在的记忆。管理有效地缓存我们可以使用WeakRef

/ /回调函数
const调= ()= > {
const obj = new WeakRef ({
名称:“Harsha”
});
console.log (obj.deref () . name);
}
/ / IIFE函数打印对象2和5秒后
(异步函数(){
等待新的承诺((解决)= > {
setTimeout (() = > {
回调();/ /保证打印“Harsha”
解决();
},2000);
});

等待新的承诺((解决)= > {
setTimeout (() = > {
回调();/ /不保修期内“Harsha”打印出来
解决();
},5000);
});
})();

在这里WeakRef读取参考使用deref ()方法。值将被印刷,第一次和第二次没有保证印刷,因为它可能会被GC清洗。

FinalizationRegistry

FinalizationRegistry让程序员注册回调函数被调用后一个对象被垃圾收集。据说是一个同伴的特点WeakRef

const注册表= new FinalizationRegistry((值)= > {
console.log(价值);
});

在这里注册表是一个实例FinalizationRegistry。传递给回调函数FinalizationRegistry被垃圾收集对象时触发。

例子:

(函数(){
const obj = {};
注册表。注册(obj,“Harsha”);
})();

obj垃圾收集,“Harsha”传递给回调函数,在控制台打印。

当垃圾收集Harsha打印出来

Intl.ListFormat

Intl.ListFormat对象是一个对象的构造函数,使语言敏感列表格式。它接受两个参数,第一个参数是语言环境,第二个参数是一个选择对象,有两个属性——风格和类型。看一个例子会更容易比在词语解释:

常量列表=[‘王’,‘女王’,‘杰克’);

新的Intl。ListFormat (“en”{风格:“长”,类型:“结合”}).format(列表);
/ /国王,王后和杰克

新的Intl。ListFormat (“en”{风格:“短”,类型:“析取”}).format(列表);
/ /国王,王后和杰克

你也可以尝试其他语言。

dateStyle Intl.DateTimeFormat和timeStyle选项

现在,我们可以使用dateStyletimeStyle请求一个特定于本地语言环境的一个给定的日期和时间长度。我们只需要通过选项和其他处理。

/ /短
新的Intl。DateTimeFormat (“en”{
timeStyle:“短”
}).format (Date.now ())
/ /“35点”

/ /betway娱乐官网中
新的Intl。DateTimeFormat (“en”{
timeStyle:“媒betway娱乐官网介”
}).format (Date.now ())
/ /“6:35:13点”

/ /长
新的Intl。DateTimeFormat (“en”{
timeStyle:“长”
}).format (Date.now ())
/ /“6:35:55 PM GMT + 5”

dateStyle下面是一些例子:

/ /短
新的Intl。DateTimeFormat (“en”{
dateStyle:“短”
}).format (Date.now ())
/ /“11/19/20”

/ /betway娱乐官网中
新的Intl。DateTimeFormat (“en”{
dateStyle:“媒betway娱乐官网介”
}).format (Date.now ())
/ /“2020年11月19日”

/ /长
新的Intl。DateTimeFormat (“en”{
dateStyle:“长”
}).format (Date.now ())
/ /“2020年11月19日”

结论

作为一名开发人员,重要的是要保持更新,任何编程语言的新特性。我希望,我给你一个简短的想法是什么。

感谢您的阅读,在评论中你最喜欢的特性!

- - -

- - -

工程师,摄影师,科技博客。对于开发人员构建产品和写道。我喜欢和爱帮助别人代码:)

Baidu