2012-01-19 8 views
1

私は、入力された値が数値であるかどうかを確認functionto ISNANを使用しています:JavaScriptの関数isnan

if(isNaN(num)) { 
    alert('I am not a number'); 
} 
else { 
// 
    } 

ただし、入力された値は、それが数などの理解とfalseを返す「5748hh」、例えば、ある場合。なにが問題ですか?

+3

この例ではかっこを正しく閉じなければなりません:) numの後ろには閉じ方がありません)。 – Eirinn

+0

isNaN( "5748hh")=== true; '何がうまくいかないのですか? – Raynos

答えて

3

ますisNaN関数の引数が数値でない場合、値は、最初の数字に強制されます。結果の値は、NaNかどうかを調べるためにテストされます。したがって、非数値の場合、数値型に変換されたときに有効なNaN以外の数値(特に空の文字列とブール値のプリミティブ)が返されますが、強制的に数値に0または1を指定すると、 "false"たとえば、空の文字列は、必ず「数字ではありません」。混乱は、「数字ではない」という用語がIEEE-794浮動小数点値として表される数値に特定の意味を持つという事実に由来します。この関数は、「この値は強制的に数値に変換されるのではなく、IEEE-794の数値ではない」という質問に答えて解釈されるべきです。

したがってalert(isNaN('45345ll'))は、値の強制がparseInt/parseFloatの変換と異なるため、trueを返します。

それがtrueを返した場合、入力されたデータが数値ではありませんので

var num = false; 
console.log(isNaN(num));  /* return false because the coerced value is 0 but */ 
console.log(parseInt(num, 10)); /* return isNaN */ 

たぶん、あなたが原因あなたのif声明

2

あなたが最初にそれを解析しようとする必要があります。

if(isNaN(parseInt(num, 10))) { 

documentationによると:

ますisNaN関数仕様の非常に最初のバージョン以来、非数値の引数のためにその動作がされています混乱する。 isNaN関数への引数が数値でない場合、値は最初に数値に強制的に引き継がれます。結果の値は、NaNかどうかを調べるためにテストされます。従って、非数値の強制このparseInt()異なり有効な非NaNの数値(数値を0または1を与える強制特に空の文字列とブールプリミティブ)の数値型の結果に強制

その数字に変更すると、5748hhのような文字列ではない番号となり、したがって表示される動作になります。

+3

これは実際には文字列 "5478hh"から有効な数字5748を返します。 – zvona

+0

@zvona OPは* "5748hh"と言っています**これは数字のように理解できます*** ***これから、私はサンプルの文字列が数字「5748」を返すべきだと理解しました。 –

+0

@ShadowWizard強制変換は変換とは異なるので、 '5748aa'は数値として強制されません。数値は返されません。以下の私の例を参照してください – fcalderan

0

isNaN("5748hh");trueを返します。

0

私はそれを試しました。

alert(isNaN("123hh")); // - alert true. 

私のFirebugのではthis JSfiddler

0

を参照してください。

>>> isNaN("5748hh") 
true 
2

あなたはそれが成功した数に解析する数字で始まる文字列を解析する場合、無視された文字列の残りの部分で。例えばparseInt('56sadfh', 10)は、56に解析されます。これを防ぐには、正規表現を使用して入力を確認する必要があります。例えば

MozillaのMDNから
if (!num.match(/[0-9]+/)) { 
    alert("not a number"); 
} 
+0

'+ '56sadfh''を使用 – Raynos

+0

@Raynos私はあなたのコメントを理解していません。どういう意味ですか? –

+1

'parseInt( '56sadfh'、10)=== 56'、' + '56sadfh'はNaNですので 'isNan(+ '56sadfh')'は動作します – Raynos

0

ますisNaN =で行方不明括弧に予期しない値を取得するには、番号ではありません。真

http://jsfiddle.net/8fMAr/

if(isNaN("5748hh")) 
{ 
    alert("not a number"); 
} 
else 
{ 
    alert("a number"); 
} 

戻り値: "数ではなく"、それが必要のように。

0

NaNは特別な番号です。 isNaN(引数)関数は引数がNaN値であるかどうかをチェックしますが、引数が有効な整数を表す文字列の場合はtrueを返します。