2017-08-19 5 views
0

私は単純にpromptを作成しました。ユーザーは1から10までの数字を入力できます。まず、answerを文字列から数値に変更します。 2番目はanswerが1と10の間であるかどうかを確認するか、またはNaNです。 answerが1および10の外にある場合、またはNaNのループが実行され、再度チェックされます。 whileは、数字が1より小さいか10より大きいかを正しく検出しますが、answer == NaNなら正しく検出しません。 alertは、入力時に答えが= NaNであることを示しているので、なぜそれが文字で機能しないのか分かりません。誰か私が間違っているのを見ることができますか?答えがNaNの場合、あなたはisNaN()機能を使用することができます検出するため答えが数字の範囲外であるか数字でない

var answer; 
 
\t 
 
do { 
 
    answer = prompt("Enter a number between 1 and 10."); 
 
    answer = Number(answer); 
 
} 
 
while (answer < 1 || answer > 10 || answer == NaN); 
 
\t 
 
alert(answer);

+1

'NaN!== NaN'。 IEEE754を賞賛します。 'Number.isNaN'を使います。それ以外の場合、「答え== NaN」は常に**間違いです。 – ASDFGerte

+1

またはインターネットエクスプローラで失敗したくない場合は 'isNaN'です:p –

答えて

3

更新

限りブラウザのサポートなど、Number.isNaN()のInternet Explorerを除くすべての主要なブラウザでサポートされています。グローバルisNaN()関数はIEでサポートされています。

1

一般的に(ここでは違いはありませんが)Number.isNanisNaNよりも使用する方が良いです。 parseIntを使用してNumberコンストラクタを使用するよりも優れていることに注意し、また

var _isNaN = Number.isNaN || isNaN; 
 
var answer; 
 

 
do { 
 
    answer = prompt("Enter a number between 1 and 10."); 
 
    answer = parseInt(answer, 10); 
 
} while (answer < 1 || answer > 10 || _isNaN(answer)); 
 

 
alert(answer);

:したがって、最良の結果を得るためにこれを試してみてください。

+1

Microsoftブラウザをターゲットにしている場合、[Number.isNaN](https://developer.mozilla.org/en-US/) docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN)は、*** Edge ***でのみサポートされ、*** Internet Explorerではサポートされていません。 – mscheker

+0

これは、デフォルトで「isNaN」が設定されている理由です。また、叫ぶのをやめてください。 –

+1

悲鳴を上げるとは、すべてのCAPSの使用を意味します。太字のテキストは、発言やコメントを強調するための意味です...あまりにも敏感ではありません。 – mscheker

関連する問題