こんにちは。たいら(@tairaengineer2)です。
転職を繰り返し現在5社経験している、14年目エンジニアです。
この記事では、 JavaScriptで特殊な値であるNaNについて
- NaNとは
- どんなときにNaNが出るのか?
- NaNを判定するやり方
- NaNとnullの違い
と、丁寧に解説していきます。
前提条件:実行環境について
実行環境は以下の通りです。
| OS | Windows11 |
|---|
NaNとは
NaNとは、数字ではないということを表す特殊な値です。
NaNは「Not a Number」の略です。
NaNには以下の2つの特徴があります。
- 自分自身とすら等しくない
- number型に属している
①nullでさえ
|
1 2 3 |
if (null === null) { // 何か処理 } |
としたらtrueで処理されるのにNaNだと
|
1 2 3 |
if (NaN === NaN) { // 何か処理 } |
falseとして処理されます。
②ですが、数値ではない、と言いつつもNaNの型はnumber型に属します。
ややこしいですね(;’∀’)
こんな感じでNaNは、特殊な値なんです。
どんなときにNaNが出るのか?
NaNは、計算結果の意味がまったく成立しないときに出ます。
具体例を以下4つ出します。
その1:数値に変換できない文字列を演算に使った場合
サンプルプログラムはこちらです。
|
1 2 |
var result = "abc" % 3; console.log(result); |
「abc」は数値に変換できないので、計算結果が無効になるのが理由です。
その2:0で割った場合
サンプルプログラムはこちらです。
|
1 2 |
var result = 10 % 0; console.log(result); |
数学的に定義されていないのが理由です。
その3:parseIntメソッドに数値に変換できない文字列を渡した場合
サンプルプログラムはこちらです。
|
1 2 |
var result = parseInt("abc"); console.log(result); |
文字列は整数に変換できないのが理由です。
その4:Math.sqrtメソッドに負の値を渡した場合
サンプルプログラムはこちらです。
|
1 2 |
var result = Math.sqrt(-10); console.log(result); |
負の数の平方根は定義されていないのが理由です。
NaNを判定するやり方
先ほど、ちらっと書きましたが
|
1 2 3 |
if (NaN === NaN) { // 何か処理 } |
は、falseとして判定されるのでできません。
なので、判定するにはNumber.isNaNメソッドを使う必要があります。
typeof演算子だと、numberになってしまうので注意です!
NaNとnullの違い
NaNに似たような感じのものでnullがありますが、この2つは全く異なります。
この2つの違いを表でまとめてみました。
| 項目 | NaN | null |
|---|---|---|
| 意味 | Not-a-Number(数値ではない特殊な値) | 値が存在しない |
| 型 | number | object |
| 型 | number | object |
| 用途 | 計算の結果が無効なとき | 変数に値が設定されていないとき |
| 自分自身と比較 | false | true |
まとめ:NaNはややこしい!
以上がJavaScriptのNaNについての解説でした!
あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ
コメント