私は無限のプロンプトシステムを実装しようとしていた今朝、かなり奇妙なことに気付きました。再帰的プロンプトが返されない
次のコードは2つのシナリオの下で2つの異なる出力を返す:
シナリオ1: 1最初のプロンプトに番号を入力し、OK
出力:number that was entered
シナリオ2:最初のプロンプトをキャンセルしてから番号とOKを入力してください
出力2:undefined
私はこれが起こっている理由として困惑です。まず、if文でそれをチェックしているとき、これはどのようにして未定義に戻りますか?第二に、私はJavaScriptの未定義は変数が宣言されているがまだ割り当てられていないことを意味していました。この場合はvar number
を割り当てています。
var number = null;
number = Prompt();
$("p").html("Number was " + number);
function Prompt()
{
var input = prompt("Enter a number", "");
if(input === null || input === "" || input === undefined || isNaN(input))
Prompt();
else
return input;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p></p>
あなただけの文字列がprompt' 'から返されたことを言及する必要があります。 'isNaN( 'anystring')'は常に 'true'を返しますが、' Number.isNaN'は 'input'が' NaN'の場合にのみ 'true'を返します。 'parseInt'をお勧めします。 – naomik
@naomik:そうではありません。 'isNaN(" ")=== false'なぜ偽を返すのか分かりませんが、おそらく' isNaN(parseFloat(input)) 'を試すことができます –
@ThomasFありがとう、私はそれを知らなかった、 'window.isNaN'はゴミの一部です。 'Number.isNaN'はずっと使いやすくなっています。 – naomik