Kann mir jemand sagen, was an diesem JS-Code falsch ist?
Ich bin am Verzweifeln und nicht einmal der Microsoft-Copilot kann mir helfen.
Der Fehler ist, dass ich "NaN" zurückbekomme und wenn ich diese Funktion durch einen Buttonklick aufrufe (die Funktion ist mit einem HTML-Button verbunden), kriege ich nichts zurück.
Das ist der Code:
function array_convert_to_int() {
let userinput_1_str = userinput_1.join("");
let userinput_1_int = parseFloat(userinput_1_str);
return userinput_1_int;
}
let number_A = array_convert_to_int();
console.log(number_A);
Woher liest du die Eingabe denn ein?
Je nachdem welchen HTML Button man klickt wird mittels push-befehlen ein anderer String hinzugefügt und die Adresse für den nächsten Wert der gespeichert werden kann +1 gerechnet.
2 Antworten
Die Funktion parseFloat liefert stets den Wert NaN (Not A Number) zurück, wenn aus dem ihr empfangenen Argument keine valide Zahl herausgelesen werden kann. Das kann in deinem Fall also passieren, wenn das Array userinput_1 leer ist oder dessen Werte zusammengefügt eben keinen lesbaren Wert bieten (der Parser liest von links nach rechts und stoppt bei dem Token, welches für ihn nicht für einen numerischen Wert verwertbar ist; Beispiel: 12a => 12 oder a12 => NaN).
Von einem undefinierten Array kann man nicht ausgehen, andernfalls würdest du eine deutliche Fehlermeldung erhalten. Die Variable mit dem Array legst du demzufolge bereits vor Ausführung des geteilten Codesnippets an.
Die Fehlerursache für Fall 1 (dein obiges Codesnippet) solllte also klar sein. Die Variable number_A wird sofort bei Programmstart definiert, array_convert_to_int also auch schon aufgerufen, obwohl userinput_1 noch ohne Inhalt ist. Nutzereingaben werden erst später vom Programm aufgenommen. Bevor der Nutzer auch nur einen Klick oder Tastendruck durchgeführt hat, ist das Skript bereits fertig.
Bei einem Aufruf der Funktion via Buttonklick kommt es darauf an, was dem Array tatsächlich übergeben wird. Lasse es dir doch zur Prüfung direkt in der Browserkonsole ausgeben:
function array_convert_to_int() {
console.log(userinput_1);
/* ... */
Danke für die Hilfe. Ich konnte das Timing anpassen und jetzt funktioniert es so wie ich will.
Ich vermute, dass das Problem daran liegt, dass du die Funktion nicht mit den erwarteten Eingabewerten aufrufst. Wenn "userinput_1" nicht definiert ist, erhältst du tatsächlich "NaN", weil die Funktion dann den Wert von "undefined" versucht zu konvertieren.
Stelle sicher, dass du "userinput_1" richtig definiert hast und dass es sich dabei um ein Array von Zahlen oder Zahl-Strings handelt, bevor du die Funktion aufrufst. Hier ein Beispiel, wie das Ganze aussehen könnte:
let userinput_1 = [1, 2, 3, 4]; // Beispiel-Array
function array_convert_to_int () {
let userinput_1_str = userinput_1.join("");
let userinput_1_int = parseFloat(userinput_1_str);
return userinput_1_int;
}
let number_A = array_convert_to_int();
console.log(number_A); // Sollte jetzt 1234 ausgeben
"Userinput_1" sollte aber definiert sein. Weil man erst werte eingebt und dann erst mit einem Button das umwandeln aktiviert. Der Code von dir hat mit dem beispeil-Array funktioniert. Aber mit meinem Array nicht.