有什么新ES2021吗?
保持更新的2021年即将到来的JavaScript功能
自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”
传递给回调函数,在控制台打印。
Intl.ListFormat
的Intl.ListFormat
对象是一个对象的构造函数,使语言敏感列表格式。它接受两个参数,第一个参数是语言环境,第二个参数是一个选择对象,有两个属性——风格和类型。看一个例子会更容易比在词语解释:
常量列表=[‘王’,‘女王’,‘杰克’);
新的Intl。ListFormat (“en”{风格:“长”,类型:“结合”}).format(列表);
/ /国王,王后和杰克
新的Intl。ListFormat (“en”{风格:“短”,类型:“析取”}).format(列表);
/ /国王,王后和杰克
你也可以尝试其他语言。
dateStyle Intl.DateTimeFormat和timeStyle选项
现在,我们可以使用dateStyle
和timeStyle
请求一个特定于本地语言环境的一个给定的日期和时间长度。我们只需要通过选项和其他处理。
/ /短
新的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日”
结论
作为一名开发人员,重要的是要保持更新,任何编程语言的新特性。我希望,我给你一个简短的想法是什么。
感谢您的阅读,在评论中你最喜欢的特性!