はじめに
JavaScriptでの||
(論理和演算子)と??
(Nullish Coalescing演算子)は、どちらも値を選択する際に使われる演算子ですが、それぞれの動作には重要な違いがあります。
||(論理和演算子)
a
が偽の値(Falsy)であればb
を返し、それ以外はa
を返します。
a || b
偽(Falsy)とみなされる値は以下の通りです。
false
0
""
(空文字列)null
undefined
NaN
const result1 = "" || "default"; // result1は "default"
const result2 = 0 || 42; // result2は 42
const result3 = "hello" || "world"; // result3は "hello"
||
は、a
がfalse
、0
、""
(空文字列)、null
、undefined
、またはNaN
のいずれかであれば、b
を返します。したがって、a
が他のどんな真の値(Truth)であれば、それを返します。
??(Nullish Coalescing演算子)
a
がnull
またはundefined
であればbを返し、それ以外はa
を返します。
a ?? b
const result4 = null ?? "default"; // result4は "default"
const result5 = undefined ?? 42; // result5は 42
const result6 = "" ?? "world"; // result6は ""(空文字)
const result7 = 0 ?? 100; // result7は 0
??
は、a
がnull
またはundefined
のときにのみb
を返します。したがって、a
がfalse
、0
、または""
(空文字列)であっても、それを返します。
まとめ
0
や""
(空文字列)といった「偽の値」を有効な値として扱いたい場合には??
を使い、そうでなければ||
を使うといった選択が可能です。