TypeScript: Nullish Coalescing (空值合并) —— ??

看到这篇文章标题的第一眼,是不是有点懵呢?

mengbi

好吧,可能知道的人一点儿也不懵,但是,不知道的人肯定是懵的!这点,毋庸置疑,比如我自己😂😂

说实话,第一次看到这两个单词 “Nullish Coalescing” 的时候,我是非常懵的,因为第 2 个单词我不认识😂(请原谅我的愚蠢)。

经过查阅资料(翻译),我认识了这个单词 “coalesce” ,它是个动词,是 “合并,联合” 的意思😄。

所以,这个 “Nullish Coalescing” 整体的意思呢,就是 “空值合并”。

jilinggui

但是,虽然 “空”、“值”、“合”、“并” 这 4 个字我都认识,但是,合在一起后,我就又不认识了😢

2mengbi

于是,我又继续往下看了看,突然,我似乎明白了!

zhenxiang

我看到了一个操作符!

没错,就是 ——> ??

好吧,虽然看到了 ?? ,但我还是不明白这个 ?? 到底代表的是什么?

3mengbi

ai

我还是看看官方爸爸的文档吧!

定义

遇到一个新的概念,先看定义!

官方爸爸给出的定义是这样的:

The nullish coalescing operator is another upcoming ECMAScript feature that goes hand-in-hand with optional chaining, and which our team has been involved with championing in TC39.

em…

即将到来的 ECMAScript 的功能?有点小期待呢😄

好吧,这句话没啥用!继续往下看!

You can think of this feature - the ?? operator - as a way to “fall back” to a default value when dealing with null or undefined.

咦咦咦!似乎有点意思哦!继续往下看!

let x = foo ?? bar();

一行代码,而且用到了主角 ?? ,那么,这个神秘的 ?? 到底起什么作用呢?

官方爸爸再次给出了一句话:

this is a new way to say that the value foo will be used when it’s “present”; but when it’s null or undefined, calculate bar() in its place.

看到这里,我恍然大悟!

原来如此!搜噶!

原来如此

简单来说,let x = foo ?? bar(); 中,如果 foonullundefined ,则 x = bar() , 否则 x = foo ;

代码对比

看完了官方的解释,我真是差点笑出猪叫😂

话不多说,来看下代码对比:

  • 版本一:

    let x = (foo !== null && foo !== undefined)
        ? foo
        : bar();
    
  • 版本二:

    let x = foo ?? bar();
    

简直不要太方便啊!

开心

突然,我想到一个问题,虽然这个 ?? 确实很方便,但是,我以前也可以很方便的实现啊!

比如这样:

let x = foo || bar();

笑容凝固

突然,我又给了自己一巴掌,真是傻*!

shanziji

注意( ?? 真正的好处)

let x = foo || bar();

这行代码虽然看似也解决了 foonullundefined 的这个难题,但是,这行代码其实是一个真正的货真价实的坑货!

笑容缺德

存在一种情况,如果 foo = 0

这个时候,简直是 B le 🐶了,0 默认和 false 是相等的,也就是说,这个时候,即便 foo 实际上是有值的(虽然为 0 ),但是,最终的结果依旧会是 x = bar()

这简直错到离谱!

但是,很多时候,我们往往会出现这样的思维误区,并且难以发现!

?? 就避免了这样的隐患!

所以,如果你的 TypeScript 版本在 3.7 以上,那么请使用 ?? ,而不是下面的愚蠢形式:⬇️

let x = (foo !== null && foo !== undefined)
    ? foo
    : bar();

如果你的 TypeScript 版本在 3.7 以下,请尽量升到 3.7 以上!

笑

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十甫寸木南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值