JavaScriptにおける「??」演算子、通称「ヌル合体演算子(Nullish Coalescing Operator)」は、非常に便利で強力な演算子です。この演算子は、ある値がnull
またはundefined
である場合に、代わりの値を返すというものです。JavaScriptでは、null
やundefined
は「空」のような意味を持つため、それらの値を処理する際に便利な方法として利用されています。
ヌル合体演算子とは?
ヌル合体演算子は、??
という形で表現されます。この演算子は、左側の値がnull
またはundefined
の場合、右側の値を返すというルールに基づいています。それ以外の値、例えば0
や空文字列""
、false
などが左側にある場合、そのまま左側の値が返されます。

基本的な構文
javascriptlet result = value1 ?? value2;
-
value1
がnull
またはundefined
の場合、value2
が返されます。 -
それ以外の値(
0
、false
、空文字列など)はvalue1
がそのまま返されます。
例
以下に、ヌル合体演算子の具体的な例を示します。
javascriptlet username = null;
let defaultName = "ゲスト";
let result = username ?? defaultName;
console.log(result); // "ゲスト"
この例では、username
がnull
であるため、代わりにdefaultName
(”ゲスト”)が返されます。
もう一つの例を見てみましょう。
javascriptlet count = 0;
let fallback = 10;
let result = count ?? fallback;
console.log(result); // 0
ここでは、count
が0
であっても、??
演算子はnull
またはundefined
のみを対象とするため、0
がそのまま返されます。
ヌル合体演算子と論理OR(||
)演算子の違い
JavaScriptでは、||
(論理OR)演算子も似たような目的で使用されますが、??
演算子との違いがいくつかあります。||
演算子は、左側の値がfalsy(偽と評価される値、例えば0
、false
、空文字列""
など)であれば右側の値を返します。一方、??
はnull
またはundefined
だけに反応します。
例えば、以下のコードを見てみましょう。
javascriptlet value1 = 0;
let value2 = "デフォルト";
let resultWithOr = value1 || value2;
let resultWithNullish = value1 ?? value2;
console.log(resultWithOr); // "デフォルト"(0はfalsyなので)
console.log(resultWithNullish); // 0(0はnullでもundefinedでもないので)
この例では、value1
が0
であっても、||
演算子はそれをfalsyと判断してvalue2
を返しますが、??
演算子は0
をそのまま返します。
ヌル合体演算子の使い所
ヌル合体演算子は、特に設定値がnull
またはundefined
であるかをチェックして代替値を提供したい場合に非常に便利です。例えば、ユーザーの入力がnull
やundefined
である場合にデフォルト値を設定する際に使われます。
設定値の例
javascriptlet config = {
theme: null,
language: undefined,
fontSize: 14
};
let theme = config.theme ?? "デフォルトテーマ";
let language = config.language ?? "日本語";
let fontSize = config.fontSize ?? 16;
console.log(theme); // "デフォルトテーマ"
console.log(language); // "日本語"
console.log(fontSize); // 14
この場合、theme
はnull
であり、language
はundefined
であるため、それぞれのデフォルト値が返されます。しかし、fontSize
は14
という有効な値なので、そのまま返されます。
注意点
-
ヌル合体演算子は、
null
やundefined
をチェックするために設計されていますが、他のfalsy値(0
、false
、""
など)はチェックしません。 -
演算子の優先順位が高いため、括弧を使って演算順序を明確にすることが推奨される場合があります。
結論
ヌル合体演算子??
は、特にnull
やundefined
のチェックを行い、より堅牢で意図通りのコードを書くために非常に有用です。これにより、デフォルト値の設定やエラー処理を簡潔に行うことができ、コードの可読性も向上します。