?? の使い方:Nullish Coalescing Operator

??の使い方をずっと勘違いしていた。JavaScriptの「??」、通称ヌリッシュコアレシング(Nullish Coalescing)演算子は、JavaScriptの条件演算子「?:」と似ているが、使い方はだいぶ異なることを知った。

条件演算子「?:」

まずは条件演算子の復習。conditionがtrueなら左側、falseなら右側を返すいつものアレ。

const result = condition ? valueIfTrue : valueIfFalse;

「??」Nullish Coalescing

私が迷ったのは、conditionとvalueIfTrueに同じものが来る場合。
以下のコードが問題ないという覚え方をしてしまっていたため、2回繰り返さなくていいようにするためのshorthandのようなものと勘違いしていた。

const platypus = {
  name: "Peter",
  age: 0
};

const result1 = platypus.name ? platypus.name : "name is undefined";
const result2 = platypus.name ?? "name is undefined";

console.log(result1) // Output: Peter
console.log(result2) // Output: Peter

上記の場合はどちらで書いても結果が同じだが、意味が少し異なることを抑えておく必要がある。

const result1 = platypus.name ? platypus.name : "name is undefined";
// こちらはもし’platypus.name’がtrueなのであれば、’platypus.name’を返す。falseなら"name is undefined"を返すという意味
const result2 = platypus.name ?? "name is undefined";
// こちらはもし’platypus.name’を返すが、もしundefinedまたはnullなのであれば"name is undefined"を返すという意味

大事なポイントは「??」ではundefinedまたはnullの時だけ右辺を返すということ!
例えば以下の可愛いカモノハシの赤ちゃんのage: 0 の例ではOutputが異なる。これは0や””(empty string)がifや「?:」などではfalseと扱われ(Falsy)てnullの側が返ってきてしまうのに対し、「??」では0はundefinedまたはnullではなく、ゼロとしてそのまま扱われるという違いによるもの。

const platypus = {
  name: "Peter",
  age: 0
};

const result3 = platypus.age ? platypus.age : null;
const result4 = platypus.age ?? null;

console.log(result3) // Output: null
console.log(result4) // Output: 0

予期せぬ結果とならないよう、ここはしっかり覚えておこう。

本日は以上!


あっという間に秋ですね。サイクリングが好きですが、
春は花粉症、夏は暑すぎる、冬は寒すぎる…
今しかない!と思ったら雨。

platypus-cycling

類似投稿