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