JavaScriptのNaNとは何だ?isNaNで判定できる!

JavaScript

JavaScriptのNaNについて書いています。
最初にNaNについて解説して、その後にisNaN関数で判定する方法について書きました。

NaNとは何だ?

NaNは「not a number」の略で、数値でないことを表す値になります。
プログラムに書いたロジックで、数値として解釈できないコードを実行したときに発生します。

NaNが発生する原因

具体的にNaNが発生するパターンは、下記などになります。

・0を0で割ったとき
・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が返ってくるため比較できない。

コメント

タイトルとURLをコピーしました