JavaScript で 0 と 空文字を == で比較すると true になる

先日、JavaScript でこんな感じのコードを見かけました。

if (val == null || val == '') {
  // 値がないときの処理
}

値が null か空文字かをチェックするコードです。おそらく文字列を想定していたと思われますが、実際は変数に数値が代入されていました。

空文字と 0 を 等価演算子 (==) で比較すると true になるため、ここでは 0 が来たときに想定通りの挙動にはなりません。

なので、ここでは 厳密等価演算子 (===) で比較します。

0 == '' //=> true
0 === '' //=> false

先のコード例はこうなります。

if (val == null || val === '') {
  // 値がないときの処理
}

ちなみに、変数が undefined の場合は null との等価演算子で引っ掛けられるので、ここはそのままで OK です。

undefined == null //=> true

現場からは以上です。

(2019/03/15 追記)

こちらに詳しくまとめられてました。

phiary.me