初めに
PHPやjavascriptなどの三項演算子で
const hoge = x ? x : y
などと書く場合に省略形として
const hoge = x ?? y
とする場合がありますが、この二つの結果が違ってくる場合があります
実際に試してみる
例えば以下の場合は同じ結果です
const x = 1
const y = 999
console.log(x ? x : y)
> 1
const x = 1
const y = 999
console.log(x ?? y)
> 1
しかしx = 0
の場合
const x = 0
const y = 999
console.log(x ? x : y)
> 999
const x = 0
const y = 999
console.log(x ?? y)
> 0
となり結果が異なります
なぜか
??
は正式名称Null合体演算子
と言い、名前の通りnull(undefined)かどうかを見てるためです
終わりに
この結果から、変数に0や空文字がありえて、かつ0や空文字もfalseにしたい場合は
x ? x : y
もしくは
x || y
を使ったほうがいいと思います
言語によってはエルビス演算子?:
でも良いかと思います