Wert | Umwandlung in Zahl | Umwandlung in String |
Eine Zahl | Die Zahl selbst | Ein String aus den Ziffern dieser Zahl |
Ein String aus Ziffern, die eine Zahl bilden | Der Wert der Zahl | Der String selbst |
Der leere String '' | 0 | '' |
Jeder andere String | NaN | Der String selbst |
false | 0 | 'false' |
true | 1 | 'true' |
null | 0 | 'null' |
undefined | NaN | 'undefined' |
Das leere Array [] | 0 | '' |
Ein Array, das eine einzige Zahl enthält | Die Zahl | Ein String aus den Ziffern der Zahl |
Andere Arrays | NaN | Die Elemente, umgewandelt in Strings und durch Kommata getrennt, z. B. '1,2,3'. |
Objekte | Standardmäßig NaN, kann aber angepasst werden | Standardmäßig '[object Object]', kann aber angepasst werden. |
Tab. 1–1 Umwandlung in Zahlen und Strings
Tipp
Verlassen Sie sich nicht auf die automatische Typumwandlung bei arithmetischen Operatoren. Die Regeln sind kompliziert und können zu unerwarteten Ergebnissen führen. Wenn Sie Strings oder einelementige Arrays als Operanden verarbeiten wollen, dann wandeln Sie sie explizit um.
Tipp
Verwenden Sie lieber Template-Literale (siehe Abschnitt 1.11, »Template-Literale«) als die String-Verkettung. Dadurch müssen Sie sich nicht merken, was der Operator + bei nichtnumerischen Operanden macht.
1.8Boolesche Werte
Der boolesche Typ kann die beiden Werte false und true annehmen. In einer Bedingung werden Werte beliebiger Typen in einen booleschen Wert umgewandelt. Dabei werden 0, NaN, null, undefined und der leere String zu false konvertiert und alle anderen zu true.
Das klingt zwar ganz einfach, aber wie Sie im folgenden Kapitel noch sehen werden, kann das zu verwirrenden Resultaten führen. Um Unklarheiten auf ein Minimum zu reduzieren, ist es sinnvoll, in Bedingungen grundsätzlich echte boolesche Werte zu verwenden.
1.9null und undefined
JavaScript kennzeichnet das Fehlen eines Wertes auf zwei verschiedene Arten. Wenn eine Variable deklariert, aber nicht initialisiert wird, ist ihr Wert undefined. Das geschieht häufig bei Funktionen: Wenn Sie eine Funktion aufrufen, aber keinen Parameter bereitstellen, hat die Parametervariable den Wert undefined. Der Wert null dagegen dient dazu, die beabsichtigte Abwesenheit eines Wertes zu kennzeichnen.
Ist diese Unterscheidung sinnvoll? Darüber gehen die Meinungen auseinander. Manche Programmierer meinen, dass die Verwendung zweier solcher Verlegenheitswerte fehleranfällig ist. Deshalb raten sie dazu, nur einen davon zu verwenden. Das sollte dann undefined sein, da es nicht möglich ist, diesen Wert in JavaScript zu vermeiden, wohingegen Sie auf null (fast) immer verzichten können.
Nach der gegenteiligen Ansicht sollten Sie weder Werte auf undefined setzen noch undefined von einer Funktion zurückgeben lassen, sondern für fehlende Werte stets null verwenden. Dadurch bleibt undefined als ein Signal reserviert, das auf ernste Probleme hindeutet.
Tipp
Einigen Sie sich bei jedem Projekt auf die eine oder die andere Vorgehensweise, also entweder undefined oder null zur Anzeige der beabsichtigten Abwesenheit eines Wertes zu verwenden. Dadurch ersparen Sie sich später endlose philosophische Diskussionen und unnötige Prüfungen auf undefined und null.
Vorsicht
Im Gegensatz zu null ist undefined kein reserviertes Wort, sondern eine Variable im globalen Gültigkeitsbereich. Früher war es sogar möglich, der globalen Variablen undefined einen neuen Wert zuzuweisen! So etwas zu tun, ist natürlich eine furchtbare Idee, und heutzutage ist undefined eine Konstante. Allerdings können Sie immer noch lokale Variable mit dem Namen undefined deklarieren. Das ist allerdings nach wie vor eine schlechte Idee. Deklarieren Sie auch keine lokalen Variablen mit den Namen NaN und Infinity.
1.10String-Literale
String-Literale sind in einfache oder doppelte Anführungszeichen eingeschlossen, also z. B. 'Hallo' oder "Hallo". In diesem Buch verwende ich dazu immer einfache Anführungszeichen.
Wenn innerhalb eines Strings ein Anführungszeichen der gleichen Art steht, mit der der String begrenzt ist, dann müssen Sie es mit einem Backslash maskieren. Auch Backslashs selbst und die Steuerzeichen aus Tabelle 1–2 müssen Sie mit Backslashs maskieren.
Beispielsweise ist '\\\'\'\\\n' ein String von fünf Zeichen Länge, der die Zeichenfolge \''\ gefolgt von einem Zeilenumbruch enthält.
Um beliebige Unicode-Zeichen in einen JavaScript-String aufzunehmen, können Sie sie einfach eingeben oder kopieren, wobei die Quelldatei jedoch eine geeignete Kodierung verwenden muss (z. B. UTF-8):
let greeting = 'Hello
Wenn Ihre Dateien unbedingt ASCII-Format haben müssen, können Sie stattdessen die Schreibweise \u{Codepunkt} verwenden:
let greeting