Kann mir jemand sagen, was an diesem JS-Code falsch ist?

verreisterNutzer  01.11.2024, 14:40

Woher liest du die Eingabe denn ein?

lukener11 
Beitragsersteller
 01.11.2024, 14:53

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

Vom Beitragsersteller als hilfreich ausgezeichnet

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);
  /* ... */

lukener11 
Beitragsersteller
 02.11.2024, 14:49

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

lukener11 
Beitragsersteller
 01.11.2024, 15:15

"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.