16
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

すぐ分かる Nullish Coalescing と短絡評価の違い

Last updated at Posted at 2019-11-10

TL;DR

  • JavaScript には null, undefined の他にもいくつか falsy な値がある
  • || で短絡評価させる場合、 falsy な値なら何でも [falsyな値] || [default] で結果が [default] になる
  • Nullish Coalescing の ?? を使う場合、 null ?? [default], undefined ?? [default] においてのみ、結果が [default] になる

falsy な値

JavaScript には、Boolean コンテキストでは false と評価されるような値がいくつかあります。falseは当然そうですが、他にも**null, undefined, 0, NaN, ""**などがあります。

短絡評価はこの性質を利用したものです。

null || "Hello World!"       // "Hello World!"
undefined || "Hello World!"  // "Hello World!"
false || "Hello World!"      // "Hello World!"
0 || "Hello World!"          // "Hello World!"
NaN || "Hello World!"        // "Hello World!"
"" || "Hello World!"         // "Hello World!"

これを利用して、「変数 hoge に、もし正しく値が入っていなかったら、デフォルトで fuga を使う」というような意図で hoge || fuga というコーディングをすることがありました(どれほど一般的なのかはよく分かりませんが、私は記憶にあります)。
しかし、null, undefined ならともかく、数字の 0 や空文字の "" を「正しく値が入っていない」とみなすのは、状況によっては不適切です。

Nullish Coalescing

TypeScript 3.7 では Optional Chaining のような素晴らしいシンタックスが入りましたが、その他にも、Nullish Coalescing というものが入りました。Nullish Coalescing は、いわば、短絡評価を null と undefined に制限したものです。

null ?? "Hello World!"       // "Hello World!"
undefined ?? "Hello World!"  // "Hello World!"
false ?? "Hello World!"      // false
0 ?? "Hello World!"          // 0
NaN ?? "Hello World!"        // NaN
"" ?? "Hello World!"         // ""

こちらの方がより意図に適っている場合が多いと思います。

Reference

16
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?