前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >没想到啊,ES2021居然更新了这样的5个 API

没想到啊,ES2021居然更新了这样的5个 API

作者头像
陈大鱼头
发布2021-03-23 14:48:00
3630
发布2021-03-23 14:48:00
举报
文章被收录于专栏:鱼头的Web海洋鱼头的Web海洋

  • 作者:陈大鱼头
  • github:KRISACHAN

如果没什么特殊情况,每一年 tc39 都会更新一些特性 API ,今年出的则是第 12 版,也就是我们说的 ES12 ,下面让我们一起来看看都更新了哪些 API。

数字分隔符(Numeric Separators)

众所周知,我们的 Number 是长这样的:123456 。但是当金额大了之后,就会很不直观,每次看还得算,不过如今我们可以这样:

代码语言:javascript
复制
// 旧的方案
const count1 = 123456789;

// 新的方案
const count2 = 123_456_789;

console.log(count2); // 123456789

String.prototype.replaceAll()

新的 replaceAll() 可以直接替换全部匹配的字符,就像这样:

代码语言:javascript
复制
'好一朵美丽的茉莉花,茉莉花啊,茉莉花啊,你又香又好看'.replaceAll('茉莉花', '玫瑰花');
// 好一朵美丽的玫瑰花,玫瑰花啊,玫瑰花啊,你又香又好看

但是如果你在 replaceAll() 里用 g 以外的标识符,或者不加 g ,都会报错,例如:

代码语言:javascript
复制
'好一朵美丽的茉莉花,茉莉花啊,茉莉花啊,你又香又好看'.replaceAll(/茉莉花/, '玫瑰花');
// Uncaught TypeError: String.prototype.replaceAll called with a non-global RegExp argument

所以这个只是 g 的语法糖。。。

逻辑赋值运算符(Logical Assignment Operators)

这次也更新了一些运算符,以后写起短链表达式来就方便多了。

And and equals 运算符 (&&=)

&&= 仅在左操作数为 truthy 时才执行赋值。

代码语言:javascript
复制
let a = 1;
let b = 2;
a &&= b;
console.log(a); // 2

// 等价于
if (a) {
    a = b;
}
console.log(a); // 2

Or or equals (||=)

||=&&= 相反,仅当左操作数为 falsy 时才执行赋值。

代码语言:javascript
复制
let a = undefined;
let b = 2;

a ||= b;
console.log(a); // 2

// 等价于
if (!a) {
    a = b;
}

Question question equals (??=)

??= 仅当左操作数为 null 或者 undefined 才执行赋值。

代码语言:javascript
复制
let a = undefined;
let b = 2;

a ??= b;
console.log(a); // 2

// 等价于
if (a === null || a === undefined) {
    a = b;
};

Promise.any

这次 Promise 出了一个新方法 Promise.any ,跟 Promise.all 正好相反,只要有一个是 promisefulfilled 时,则直接返回该结果,如果都是 rejected ,则报错 。

代码语言:javascript
复制
Promise
  .any([
    Promise.reject('rejected'),
    Promise.resolve('fulfilled')
 ])
 .then(res => console.log(res))
 .catch(err => console.error(err));
// fulfilled

Promise
  .any([
    Promise.reject('rejected1'),
    Promise.reject('rejected2')
 ])
 .then(res => console.log(res))
 .catch(err => console.error(err));
// AggregateError: All promises were rejected

Promise
  .any([
    Promise.resolve('resolve1'),
    Promise.resolve('resolve1')
 ])
 .then(res => console.log(res))
 .catch(err => console.error(err));
// resolve1

WeakRefs

WeakRefWeak References(弱引用) 的简写,其主要用途是对另一个对象进行弱引用。这就意味着它不会阻止GC(garbage collector 垃圾收集器)收集对象。当我们不想将对象永远保存在内存中时,这就很有用了。但是使用的时候要慎重,因为有可能出现要使用时,被引用对象已经被回收的情况。就连 TC39 提案都建议能不用就不用。

代码语言:javascript
复制
const newRef = new WeakRef({
     name: '鱼头',
     age: '26',
     sex: '男'
});

const obj = newRef.deref();

console.log(obj); // {name: "鱼头", age: "26", sex: "男"}

参考资料

  1. What's new in ECMAScript 2021
  2. Ecma TC39
  3. [ECMAScript] TC39 process
  4. The TC39 Process

后记

如果你喜欢探讨技术,或者对本文有任何的意见或建议,非常欢迎加鱼头微信好友一起探讨,当然,鱼头也非常希望能跟你一起聊生活,聊爱好,谈天说地。鱼头的微信号是:krisChans95 也可以扫码关注公众号,订阅更多精彩内容。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鱼头的Web海洋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数字分隔符(Numeric Separators)
  • String.prototype.replaceAll()
  • 逻辑赋值运算符(Logical Assignment Operators)
    • And and equals 运算符 (&&=)
      • Or or equals (||=)
        • Question question equals (??=)
        • Promise.any
        • WeakRefs
        • 参考资料
        • 后记
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档