Automatische Typumwandlung
Wie Sie bereits wissen, sollten Zeichenketten in JavaScript in Anführungszeichen gesetzt werden. Es kann vorkommen, dass alle Zeichen der Zeichenkette Ziffern sind:
let a = '123';
In diesem Fall ist die Variable a ebenfalls
eine Zeichenkette, jedoch mit einer Besonderheit.
Die Besonderheit besteht darin: Wenn man eine mathematische Operation auf eine Zeichenkette mit Ziffern anwendet - wird diese Operation so ausgeführt, als ob wir tatsächlich Zahlen und nicht Zeichenketten hätten:
alert('2' * '3'); // gibt 6 aus
In diesem Fall erkennt JavaScript, dass wir versuchen, eine für Zeichenketten ungültige, aber für Zahlen gültige Operation durchzuführen.
Es erkennt auch, dass unsere Zeichenketten im Grunde Zahlen in Anführungszeichen sind. Daher führt JavaScript automatisch eine Umwandlung dieser Zeichenketten in Zahlen durch und führt die entsprechende mathematische Operation mit ihnen aus.
Dies funktioniert, wenn unsere Zeichenketten nur
Ziffern enthalten. Wenn dort auch nur ein Buchstabe ist
- wird JavaScript die Operation als ungültig betrachten
und als Ergebnis den Wert NaN liefern:
alert('2' * '3s'); // gibt NaN aus
Darüber hinaus findet eine automatische Umwandlung statt, wenn die Operation mathematisch korrekt ist, aber für Zeichenketten unzulässig ist.
Zum Beispiel können Zeichenketten (im Gegensatz zu Zahlen) nicht multipliziert, dividiert oder subtrahiert werden, daher wird bei all solchen Operationen eine automatische Umwandlung von Zeichenketten mit Ziffern in Zahlen erfolgen.
Allerdings können Zeichenketten, genau wie Zahlen, mit dem Operator +
addiert werden. Das bedeutet,
dass es im Falle einer Addition keine automatische Umwandlung
geben wird:
let a = '1' + '2';
alert(a); // gibt '12' aus - Zeichenketten wurden addiert
Wenn ein Summand eine Zahl und der andere eine Zeichenkette ist, gewinnt immer die Zeichenkette:
let a = 1 + '2';
alert(a); // gibt '12' aus
In solchen Fällen wandelt JavaScript umgekehrt automatisch die Zahlen in Zeichenketten um und führt die Addition der Zeichenketten durch.
Es gibt jedoch Nuancen, wenn es mehr als zwei Summanden gibt: In diesem Fall hängt die Umwandlung in einen bestimmten Typ von der Reihenfolge der Operationsausführung ab.
Im folgenden Beispiel werden zuerst 2 und 3
als Zahlen addiert, und dann wird das Ergebnis
zur Zeichenkette '1' als Zeichenkette '5' addiert,
was letztendlich die Zeichenkette '15' ergibt:
let a = '1' + (2 + 3);
alert(a); // gibt '15' aus
Wenn man die Klammern weglässt, wird alles
von links nach rechts addiert. Das heißt, zuerst wird zur Zeichenkette '1'
die Zahl 2 addiert, was zur
Zeichenkette '12' führt. Dann wird zu dieser
Zeichenkette die Zahl 3 addiert, was zur
Zeichenkette '123' führt:
let a = '1' + 2 + 3;
alert(a); // gibt '123' aus
Im folgenden Beispiel stehen die Zahlen 2
und 3 jedoch am Anfang, daher werden sie zuerst
als Zahlen addiert, was die Zahl 5 ergibt, und dann wird
diese Zahl zur Zeichenkette '1' addiert,
was letztendlich die Zeichenkette '51' ergibt:
let a = 2 + 3 + '1';
alert(a); // gibt '51' aus
Bestimmen Sie, ohne den Code auszuführen, was auf dem Bildschirm ausgegeben wird:
let a = '5' + '2';
alert(a);
Bestimmen Sie, ohne den Code auszuführen, was auf dem Bildschirm ausgegeben wird:
let a = '5' + 2;
alert(a);
Bestimmen Sie, ohne den Code auszuführen, was auf dem Bildschirm ausgegeben wird:
let a = 5 + '2';
alert(a);
Bestimmen Sie, ohne den Code auszuführen, was auf dem Bildschirm ausgegeben wird:
let a = 5 + 2;
alert(a);
Bestimmen Sie, ohne den Code auszuführen, was auf dem Bildschirm ausgegeben wird:
let a = '5' * '2';
alert(a);
Bestimmen Sie, ohne den Code auszuführen, что выведется auf dem Bildschirm ausgegeben wird:
let a = '5' - '2';
alert(a);
Bestimmen Sie, ohne den Code auszuführen, was auf dem Bildschirm ausgegeben wird:
let a = '5' / '2';
alert(a);
Bestimmen Sie, ohne den Code auszuführen, was auf dem Bildschirm ausgegeben wird:
let a = '5' % '2';
alert(a);
Bestimmen Sie, ohne den Code auszuführen, was auf dem Bildschirm ausgegeben wird:
let a = '5s' * '2';
alert(a);
Bestimmen Sie, ohne den Code auszuführen, was auf dem Bildschirm ausgegeben wird:
let a = '5s' + '2';
alert(a);
Bestimmen Sie, ohne den Code auszuführen, was auf dem Bildschirm ausgegeben wird:
let a = (-'5') + (-'2');
alert(a);
Bestimmen Sie, ohne den Code auszuführen, was auf dem Bildschirm ausgegeben wird:
let a = '5' * 1 + '2' * 1;
alert(a);
Bestimmen Sie, ohne den Code auszuführen, was auf dem Bildschirm ausgegeben wird:
let a = '5' * '1' + '2' * '1';
alert(a);
Bestimmen Sie, ohne den Code auszuführen, was auf dem Bildschirm ausgegeben wird:
let a = '' + 3 + 1;
alert(a);