当前位置:网站首页>【ES】ES2021 我学不动了,这次只学 3 个。
【ES】ES2021 我学不动了,这次只学 3 个。
2022-08-01 19:41:00 【GopalFeng】
秋裤,你最近在干哈呢?
最近在看 ES2021 呢。
这才 2020 年,你学啥2021呢,学不动,学不动
你的 2020 进度84%
▓▓▓▓▓▓▓▓▓▓▓▓▓░░░
那你说一说呗,都学了些啥?还有,能不能说简单一点,我怕我学不动。
目前已经确定的有 5 个新特性,为了能让你更好地记住,我特定挑了 3 个我觉得比较有意思的和你讲讲吧。
好好好,最喜欢用最少的时间学最有用的东西了!
1.逻辑操作符
你有遇到过这样的情况吗?
function example(a) {
// Default `a` to "foo"
if (!a) {
a = "foo";
}
// or
a = a || "foo";
}
某些初始化的时候需要一些冗长的逻辑代码
function example(opts) {
// Ok, but could trigger setter.
opts.foo = opts.foo ?? "bar";
// No setter, but 'feels wrong' to write.
opts.baz ?? (opts.baz = "qux");
}
example({ foo: "foo" });
你别说,还真有,有时候写多了,我还有点头晕。
你别打断我,我这是一个自问自答模式,你不用回答。
刚才讲到哪里来着,哦,代码不够简洁。激动人心的时候到了,现在有了新的特性,以后可以写的更加清楚了。
function example(opts) {
// 旧的方式
if (!a) {
a = "foo";
}
// or
a = a || "foo";
// 新的方式
a ||= "foo"
}
example({ foo: "foo" });
function example(opts) {
// 旧的方式
opts.foo = opts.foo ?? "bar";
// 新的方式
opts.foo ??= "bar";
// 旧的方式
opts.baz ?? (opts.baz = "qux");
// 新的方式
opts.baz ??= "qux";
}
example({ foo: "foo" });
看着是不是比之间简洁了很多,有没有觉得这个模式感觉很熟悉?
emm,这个真是个疑问句,配合一下。
得了!对!逻辑运算符中常用的嘛。以前也有,往下看。
a = a + b; // old
a += b;
a = a - b; // old
a -= b;
对的,这一次加入了 3 个 ||、&& 、?? ,用法还是和以前一样,是不是很简单?
嗯,没有新的使用成本,不错!有点意思,继续讲。
接下来这个可厉害了,是 Promise.any
2.Promise.any
Promise.any
。从字面意思来看,相信聪明的你应该能大致猜出这个 API 的作用。Promise.any
接受一个 Promise
的数组。当其中任何一个 Promise
完成(fullfill)时,就返回那个已经有完成值的 Promise
。如果所有的 Promise
都拒绝(reject),则返回一个拒绝的 Promise
,该 Promise
的返回值是一个 AggregateError
对象。
Promise.any(promises).then(
(first) => {
// 任意一个Promise完成了
},
(error) => {
// 所有Promise都被拒绝了
}
);
这个有什么具体的场景吗?
给一个官方的例子,最简单的就是测试哪个站点的速度最快。
Promise.any([
fetch("https://v8.dev/").then(() => "home"),
fetch("https://v8.dev/blog").then(() => "blog"),
fetch("https://v8.dev/docs").then(() => "docs"),
])
.then((first) => {
// Any of the promises was fulfilled.
console.log(first);
// → 'home'
})
.catch((error) => {
// All of the promises were rejected.
console.log(error);
});
例如一些播放平台,可以通过这个来测试当前延迟最低的线路是哪个,优先切换到对应的最快的线路。
好东西,有一个问题,这个和Promise.all 好像呀
没错,我们可以把这两个一起记忆, 我们可以把 Promise.any 理解成 Promise.all 的相反操作。下面我通过 Promise.all 来降级模拟promise.any 来加深记忆。
你别这种眼神看着我,我又不是不讲。
来,亮出祖传降级代码
function reverse(promise) {
return new Promise((resolve, reject) =>
Promise.resolve(promise).then(reject, resolve)
);
}
function promiseAny(iterable) {
return reverse(Promise.all([...iterable].map(reverse)));
}
// https://github.com/m0ppers/promise-any/blob/master/index.js
实现很简单,通过一个反转函数,利用 Promisea.all
的特性,只要一个Promise
被拒绝了,就进入到reject
,因此反转resolve
和 reject
就能模拟出 Promise.any
了。
我想想....秒啊 !将 Promise.all
的 reject
当做是Promise.any
的 resolve
,最后一个呢?
先考你一个问题,1000000000 这是多少?
10 亿
100,000,000 这个呢
1 亿
你觉得有什么差别吗?
有,黑夜给了我黑色的眼睛,你却让我瞎了眼。
正经点。
第一个没有 “,” 间隔标识,太难读懂了。
接下来要讲的新特性就是数字分隔符,有了这个特性,你黑色的眼睛就可以去寻找光明了。
3.数字分隔符
let fee1 = 1000000000;
let fee2 = 1_000_000_000; // fee1 === fee2
这个模式不仅在十进制可以用,二进制,十六进制....甚至 BigInt,都可以使用。
// Binary Literals
let nibbles = 0b1010_0001_1000_0101;
// Hex Literal
let message = 0xa0_b0_c0;
// BigInt Literal
const max = 2n ** (64n - 1n) - 1n;
console.log(max === 9_223_372_036_854_775_807n);
以上特性均在最新版 chrome
支持,快打开控制台玩耍吧。
如果想要在实际项目中使用,请使用以下两个插件。
- Logical Assignment Operator[1]
- Numeric Separator[2]
[1]Logical Assignment Operator: https://babeljs.io/docs/en/babel-plugin-proposal-logical-assignment-operators
[2]Numeric Separator: https://babeljs.io/docs/en/babel-plugin-proposal-numeric-separator
[3]https://juejin.im/post/6856704516499832845
[4]https://github.com/tc39/proposals/blob/master/finished-proposals.md
边栏推荐
- Ha ha!A print function, quite good at playing!
- Pytorch模型训练实用教程学习笔记:一、数据加载和transforms方法总结
- 如何记录分析你的炼丹流程—可视化神器Wandb使用笔记【1】
- AcWing 797. 差分
- How PROE/Croe edits a completed sketch and brings it back to sketching state
- mysql解压版简洁式本地配置方式
- Creo5.0草绘如何绘制正六边形
- 【kali-信息收集】(1.5)系统指纹识别:Nmap、p0f
- SENSORO成长伙伴计划 x 怀柔黑马科技加速实验室丨以品牌力打造To B企业影响力
- SQL的 ISNULL 函数
猜你喜欢
XSS range intermediate bypass
Creo5.0草绘如何绘制正六边形
Win11如何开启剪贴板自动复制?Win11开启剪贴板自动复制的方法
Ha ha!A print function, quite good at playing!
安全作业7.25
终于有人把AB实验讲明白了
win10,在proe/creo中鼠标中键不能放大缩小
ThreadLocal讲义
#yyds dry goods inventory# Interview must brush TOP101: the last k nodes in the linked list
密码学的基础:X.690和对应的BER CER DER编码
随机推荐
腾讯云主机安全 x 轻量应用服务器|强强联合主机安全普惠版重磅发布
AcWing 797. 差分
驱动上下游高效协同,跨境B2B电商平台如何释放LED产业供应链核心价值?
Find the sum of two numbers
第55章 业务逻辑之订单、支付实体定义
小白系统初始化配置资源失败怎么办
Heavy cover special | build the first line of defense, cloud firewall offensive and defensive drills best practices
选择合适的 DevOps 工具,从理解 DevOps 开始
【周赛复盘】LeetCode第304场单周赛
Heavy cover special | intercept 99% malicious traffic, reveal WAF offensive and defensive drills best practices
工作5年,测试用例都设计不好?来看看大神的用例设计总结
环境变量,进程地址空间
Shell script topic (07): file from cfs to bos
力扣刷题之移动零
mysql自增ID跳跃增长解决方案
常用命令备查
How PROE/Croe edits a completed sketch and brings it back to sketching state
openresty 动态黑白名单
Creo5.0 rough hexagon is how to draw
kubernetes - deploy nfs storage class