スポンサーリンク

このドキュメントの内容は、以下の通りです。

はじめに

プログラミング言語には、謎の文字列・定数がいっぱいあります。C言語で言えば、例えばNULLです。
JavaScript にもいろいろあると思いますが、今回は NaN をとりあげます。

NaNの読み方


NaNは、ナンと読みます。

一般論としての NaN とは


一般論としての NaN は Not a Number です。日本語で言えば、数字ではない、ということになります。コンピュータで、浮動小数点演算で、不正なオペランドが与えられたときに、結果を表す値として利用されていました。

算術演算において、ゼロ同士の除算 0.0 / 0.0 では、 NaN が発生します。

JavaScript の NaN とは


NaN(ナン)とは、Not A Numberの略で、数値ではないことを表す、特別な値です。
NaN は、グローバルオブジェクトプロパティです。NaN には、書き込みができません。

JavaScript で parseInt() などを利用したときに、数値に変換できないオブジェクトを渡した場合、NaNが返されます。NaNであるかの判定には、isNaNで調べることができます。

一般論として、ゼロ同士の除算を行うと、NaNになると説明しましたが、 node コマンドで以下の計算を実行すると NaNが発生することを確認できます。
% node
> 0/0
NaN
> 0.0/0.0
NaN

NaNの判定の方法


NaN であるかを検証するには、isNaN を利用できます。
var x = parseInt ( value );
if ( isNaN ( x ) ) {
	// NaN
}

下記はサンプルコードです。
function nan_test(x) {
        if (isNaN(x)) {
      	  return NaN;
        }
        return x;
}
console.log( nan_test ('1') ); // (A)
console.log( nan_test ('Not-A-Number') ); // (B)

上記を実行した場合、以下の結果が得られます。
1
NaN

(A) で確認した 1 は 数字で、(B)で指定した文字列は 非数であることが確認できました。

NaN と NaN を比較すると期待した結果が得られません。
NaN と NaN を == や === で比較した場合、 true が返ってくることを期待するかもしれませんが、以下の結果になります。
> NaN == NaN
false
> NaN === NaN
false

NaN であるかどうかを調べる場合には、 isNaN を使用しましょう。

NaNとNumber.NaNの違いは?


JavaScript には、 Numberと呼ばれる標準ビルトインオブジェクトがあります。Number のプロパティの1つに NaN があります。 NaNNumber.NaNは、同じです。

isNaN()とNumber.isNaN()の違いは?

NaN と Number.NaN は、同じであると説明をいたしました。

Number には Number.isNaN() があります。
NaN と Number.NaN が同じなのだからisNaN() と Number.isNaN() も同じではないか?と思うかもしれませんが、実は、異なります。

nodeコマンドで以下の実験を行いました。
> isNaN('hello')
true
> Number.isNaN('hello')
false

上記の通り、 isNaN と Number.isNaN の違いがあることがわかります。
実は、Number.isNaN()は、値そのものが NaNであるときだけ trueを返します。
> Number.isNaN(NaN)
true

もちろん isNaN で NaN を確認すると true です。
> isNaN(NaN)
true

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー