0️⃣

【JS】NumberとparseIntの違いでハマった

2024/07/03に公開

はじめに

JavaScriptで数値に変換する方法としてよく使用されるNumber関数とparseInt関数ですが、それぞれにnullundefinedを渡した場合の挙動には違いがあります。
これで少しハマったので備忘録です。

Number関数の挙動

Number関数は、引数を数値に変換しようと試みます。nullundefinedが渡された場合の挙動は以下の通りです。

nullが渡された場合

console.log(Number(null)); // 0

nullNumber関数に渡すと、0が返されます。これは、nullが数値に変換される際に0として扱われるためです。

undefinedが渡された場合

console.log(Number(undefined)); // NaN

undefinedNumber関数に渡すと、NaN(Not-a-Number)が返されます。undefinedは数値に変換できないため、このような結果になります。

parseInt関数の挙動

parseInt関数は、文字列を解析して整数に変換します。nullundefinedが渡された場合の挙動は以下の通りです。

nullが渡された場合

console.log(parseInt(null)); // NaN

nullparseInt関数に渡すと、NaNが返されます。parseIntはまず引数を文字列に変換しようとしますが、nullは文字列に変換されても数値として解釈できないため、NaNとなります。

undefinedが渡された場合

console.log(parseInt(undefined)); // NaN

undefinedparseInt関数に渡すと、NaNが返されます。undefinedも同様に文字列に変換されても数値として解釈できないため、NaNとなります。

まとめ

  • Number(null) は 0 を返すが、Number(undefined)NaN を返す。
  • parseInt(null)parseInt(undefined) はどちらも NaN を返す。

今回はNumber(null)が0になる点でハマってしまいました...
これらの違いを理解することで、予期しない挙動を避けられるはずです。

参考

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/parseInt

Discussion