Ich habe heute Morgen etwas merkwürdiges bemerkt, als ich versuchte, ein endloses Aufforderungssystem zu implementieren.Rekursive Eingabeaufforderung zurück undefined
Der folgende Code gibt 2 verschiedene Ausgänge unter 2 Szenarien:
Szenario 1: Nummer eingeben auf erster Eingabeaufforderung und ok
Ausgang 1:number that was entered
Scenario 2: Die erste Eingabeaufforderung abbrechen, dann die Nummer eingeben und OK
Ausgang 2:undefined
Ich bin ratlos, warum dies geschieht. Erstens, wie kommt das zurück undefiniert, wenn ich das in der if-Anweisung überprüfe? Zweitens hatte ich den Eindruck, dass in JavaScript undefined bedeutet, dass eine Variable deklariert wurde, aber noch nicht zugewiesen wurde. In diesem Fall weise ich die var number
zu.
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>
Sie sollten erwähnen, dass nur eine Zeichenfolge von 'prompt' zurückgegeben. 'isNaN ('anystring')' gibt immer 'true' zurück, während' Number.isNaN' nur 'true' zurückgibt, wenn' input' tatsächlich 'NaN' ist. Empfehlen Sie 'parseInt' usw. – naomik
@naomik: nicht wahr. 'isNaN (" ") === false" Ich weiß nicht, warum es falsch zurückgibt, aber vielleicht könntest du es versuchen "isNaN (parseFloat (input))' –
@ThomasF danke, das wusste ich nicht, ich habe mich nur gestört daran zu erinnern, dass 'window.isNaN' ein Stück Müll ist. 'Number.isNaN' ist viel brauchbarer. – naomik