0️⃣
【JS】NumberとparseIntの違いでハマった
はじめに
JavaScriptで数値に変換する方法としてよく使用されるNumber関数とparseInt関数ですが、それぞれにnullやundefinedを渡した場合の挙動には違いがあります。
これで少しハマったので備忘録です。
Number関数の挙動
Number関数は、引数を数値に変換しようと試みます。nullやundefinedが渡された場合の挙動は以下の通りです。
nullが渡された場合
console.log(Number(null)); // 0
nullをNumber関数に渡すと、0が返されます。これは、nullが数値に変換される際に0として扱われるためです。
undefinedが渡された場合
console.log(Number(undefined)); // NaN
undefinedをNumber関数に渡すと、NaN(Not-a-Number)が返されます。undefinedは数値に変換できないため、このような結果になります。
parseInt関数の挙動
parseInt関数は、文字列を解析して整数に変換します。nullやundefinedが渡された場合の挙動は以下の通りです。
nullが渡された場合
console.log(parseInt(null)); // NaN
nullをparseInt関数に渡すと、NaNが返されます。parseIntはまず引数を文字列に変換しようとしますが、nullは文字列に変換されても数値として解釈できないため、NaNとなります。
undefinedが渡された場合
console.log(parseInt(undefined)); // NaN
undefinedをparseInt関数に渡すと、NaNが返されます。undefinedも同様に文字列に変換されても数値として解釈できないため、NaNとなります。
まとめ
-
Number(null)は 0 を返すが、Number(undefined)はNaNを返す。 -
parseInt(null)とparseInt(undefined)はどちらもNaNを返す。
今回はNumber(null)が0になる点でハマってしまいました...
これらの違いを理解することで、予期しない挙動を避けられるはずです。
参考
Discussion