ES2021 我学不动了,这次只学 3 个。

简介: ES2021 我学不动了,这次只学 3 个。

image.pngimage.png


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" });



image.png


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" });



image.pngimage.png

image.pngimage.png


a = a + b;  // old
a += b;
a = a - b; // old
a -= b;



image.png


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都被拒绝了
  }
);


image.png



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);
  });


例如一些播放平台,可以通过这个来测试当前延迟最低的线路是哪个,优先切换到对应的最快的线路。


image.png

image.pngimage.png


来,亮出祖传降级代码


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,因此反转resolvereject就能模拟出 Promise.any



image.pngimage.pngimage.pngimage.png


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

相关文章
|
7月前
|
前端开发 JavaScript 开发者
30分钟熟练使用最常用的ES6,还不学是等着被卷死?
30分钟熟练使用最常用的ES6,还不学是等着被卷死?
|
存储 机器学习/深度学习 算法
大逆不道,从天界偷下来的算法修仙秘籍竟然传到你手上~~(结尾有彩蛋)
这有可能是你见过最离谱的标题 这有可能是你没见过的技术文章模式 我不知道我的选择是否正确,但是我的想法就是: 不再让技术冷冰冰,让所有人学习中获得快乐!
272 1
|
Web App开发 自然语言处理 JavaScript
细读 ES6 | let 真的会提升吗?
本将会从 ES5 中一些怪诞的行为出发,然后再到 ES6 中的 let、const 是否会“提升”的讨论。
179 0
细读 ES6 | let 真的会提升吗?
|
JavaScript 前端开发 API
Babel配置傻傻看不懂?
前沿:文章起源在于,朋友跟树酱说在解决项目兼容IE11浏览器过程中,遇到“眼花缭乱”的babel配置和插件等,傻傻分不清配置间的区别、以及不了解如何引用babel插件才能让性能更佳,如果你也有这方面的疑虑,这篇文章可能适合你
161 0
Babel配置傻傻看不懂?
|
程序员
28张图助我学废TS
28张图助我学废TS
28张图助我学废TS
|
缓存 JavaScript 前端开发
好记性不如烂笔头——Vite篇
好记性不如烂笔头——Vite篇
好记性不如烂笔头——Vite篇
|
JavaScript 前端开发 中间件
手撸vite插件,就问你来不来
本文主要讲vite工作机制和初始化插件流程始化插件流程
544 0
千万别再一直无脑使用ES6的箭头函数了,它虽然很有用但并不是万能的
相信很多小伙伴自从知道了ES6的箭头函数以后,都疯狂得使用,渐渐的淡忘了普通函数的使用。不过确实,箭头函数看起来比较简洁,用起来也舒服,不过它的出现是为了解决某一部分问题的,并不是用来替代普通函数的,所以我们不能在每一个地方都使用箭头函数
154 0
千万别再一直无脑使用ES6的箭头函数了,它虽然很有用但并不是万能的
|
存储 前端开发 JavaScript
Vuex最全讲解,成为前端大佬必备知识,爆肝一万多字,我行你也行❤
Vuex最全讲解,成为前端大佬必备知识,爆肝一万多字,我行你也行❤
148 0
Vuex最全讲解,成为前端大佬必备知识,爆肝一万多字,我行你也行❤
|
JSON JavaScript 算法
十个CoffeeScript一行程序——震惊你的小伙伴
Ricardo Tomasi在自己的博客上分享了十则CoffeeScript的一行程序,展示了CoffeeScript强大的表达力。你可以把这个页面发给你的小伙伴(也许还有妹纸),让他们震惊一下下。
168 0
十个CoffeeScript一行程序——震惊你的小伙伴