In Node.js, wird das Ergebnis der Anweisung console.log(1 + '2' + 3)
tatsächlich '123'
sein, und nicht 6
oder '15'
. Es handelt sich hierbei nicht um einen Rechenfehler oder eine Eigenart von Node.js, sondern um das Ergebnis einer Standardfunktion von JavaScript namens Typumwandlung.
Wenn JavaScript einen Ausdruck ausführt, der sowohl Zahlen als auch Zeichenketten (Strings) enthält, wird der gesamte Ausdruck in eine Zeichenkette umgewandelt. Diese Funktion nennt man "Typumwandlung zur Laufzeit" oder "implizite Typumwandlung". Das liegt daran, dass JavaScript eine dynamisch typisierte Sprache ist. In solchen Sprachen ist es nicht erforderlich, den Datentyp von Variablen vor deren Nutzung zu deklarieren.
In unserem Ausdruck console.log(1 + '2' + 3)
führt JavaScript nacheinander zwei Operationen aus:
Zuerst führt es die Operation 1 + '2'
aus, bei der eine Zahl (1) mit einer Zeichenkette ('2') addiert wird. Da eine der beiden Operanden eine Zeichenkette ist, wandelt JavaScript die Zahl 1 in die Zeichenkette '1' um und führt die Zeichenkettenzusammenfügung anstelle der numerischen Addition durch. Das Ergebnis ist die Zeichenkette '12'
.
Danach führt es die Operation '12' + 3
aus, bei der eine Zeichenkette ('12') mit einer Zahl (3) addiert wird. Wiederum findet eine Typumwandlung statt, bei der die Zahl 3 in die Zeichenkette '3' umgewandelt wird. Das Endergebnis ist die Zeichenkette '123'
.
Wenn man den Ausdruck console.log(1 + '2' + 3)
in Node.js ausführt, gibt die Konsole daher '123'
aus und nicht 6
oder '15'
.
Um solche unerwarteten Ergebnisse zu vermeiden, ist es wichtig, den Datentypen der Variablen, die Sie in Ihren Berechnungen verwenden, zu verstehen. Bei dem Umgang mit numerischen Berechnungen ist es oft hilfreich, sicherzustellen, dass alle beteiligten Werte tatsächlich vom Typ Number
sind. Andernfalls sollten Sie bereit sein, JavaScripts Regeln für die implizite Typumwandlung zu verstehen und zu akzeptieren.