JavaScriptのNaNについて書いています。
最初にNaNについて解説して、その後にisNaN関数で判定する方法について書きました。
NaNとは何だ?
NaNは「not a number」の略で、数値でないことを表す値になります。
プログラムに書いたロジックで、数値として解釈できないコードを実行したときに発生します。
NaNが発生する原因
具体的にNaNが発生するパターンは、下記などになります。
・0を0で割ったとき
・NaNに対して、算術演算子を使ったとき
・文字列で演算してしまっているとき
・文字列からの数値変換(parseIntやparseFloat)で、数値として解釈できないとき
・NaNに対して、算術演算子を使ったとき
・文字列で演算してしまっているとき
・文字列からの数値変換(parseIntやparseFloat)で、数値として解釈できないとき
実際に、下記のコードを実行すると、NaNが発生することが確認できます。
let result = 0 / 0
console.log(result) // NaN
result = NaN + 100
console.log(result) // NaN
result = "test" / 100
console.log(result) // NaN
result = parseInt("test")
console.log(result) // NaN
result = parseFloat("test")
console.log(result) // NaN
isNaN関数を使って判定する
NaNかどうかを判定するにはisNaN関数を使います。
let result = parseInt('intだよ')
if (isNaN(result)) {
console.log('NaNでした...')
}
最初に、parseInt関数で数値変換できずに、result
変数にNaN
が格納されます。
次の処理で、if文の中でisNaNを使っています。
これで、NaN
だったときにはtrue
が返ってきて、NaN
じゃないときにはfalse
が返ってきます。
今回はresult
変数の値はNaN
です。
そのためプログラムを実行すると「NaNでした...
」が出力されます。
比較演算子のイコールを使ってはいけない
NaNを比較するときに比較演算子のイコールを使うのはダメです。
下記のif文はどちらでもfalse
が返ってきます。
let result = parseInt('intだよ')
if (result == NaN) {
console.log('NaNでした...');
}
if (result === NaN) {
console.log('NaNでした...');
}
result
変数にNaN
が格納されています。
最初のif文でイコールを2つ使って、NaN
と比べていますが、false
が返ってきます。
次のif文で、イコールを3つ使って、厳密比較していますがこちらもfalse
が返ってきます。
このようにfalse
が返ってくるため、イコールでNaN
を比較することはできません。
NaNとは何だったか
JavaScriptのNaNについて書きました。
記事の内容をまとめると、下記になります。
・NaNは「not a number」の略で、数値でないことを表す値。
・isNaN関数で判定することができ、NaNだったらtrueが返ってくる。
・NaNを比較演算子のイコールで比較しても、falseが返ってくるため比較できない。
・isNaN関数で判定することができ、NaNだったらtrueが返ってくる。
・NaNを比較演算子のイコールで比較しても、falseが返ってくるため比較できない。
コメント