Ein Wert in JavaScript ist immer von einem bestimmten Typ. Zum Beispiel eine Zeichenfolge oder eine Zahl.
Es gibt acht grundlegende Datentypen in JavaScript. Hier gehen wir allgemein auf sie ein und in den nächsten Kapiteln werden wir sie im Detail besprechen.
Wir können jeden Typ in eine Variable einfügen. Beispielsweise kann eine Variable einmal eine Zeichenfolge sein und dann eine Zahl speichern:
// kein Fehler let message = "Hallo"; Nachricht = 123456;
Programmiersprachen, die solche Dinge zulassen, wie zum Beispiel JavaScript, werden „dynamisch typisiert“ genannt, was bedeutet, dass es Datentypen gibt, Variablen aber an keinen von ihnen gebunden sind.
sei n = 123; n = 12,345;
Der Zahlentyp repräsentiert sowohl Ganzzahl- als auch Gleitkommazahlen.
Es gibt viele Operationen für Zahlen, z. B. Multiplikation *
, Division /
, Addition +
, Subtraktion -
und so weiter.
Neben regulären Zahlen gibt es auch sogenannte „spezielle Zahlenwerte“, die ebenfalls zu diesem Datentyp gehören: Infinity
, -Infinity
und NaN
.
Infinity
stellt die mathematische Unendlichkeit ∞ dar. Es handelt sich um einen Sonderwert, der größer als jede beliebige Zahl ist.
Durch Division durch Null erhalten wir:
alarm( 1 / 0 ); // Unendlichkeit
Oder verweisen Sie einfach direkt darauf:
alarm(Unendlich); // Unendlichkeit
NaN
stellt einen Rechenfehler dar. Es ist das Ergebnis einer falschen oder undefinierten mathematischen Operation, zum Beispiel:
alarm( "keine Zahl" / 2 ); // NaN, eine solche Aufteilung ist falsch
NaN
ist klebrig. Jede weitere mathematische Operation auf NaN
gibt NaN
zurück:
alarm( NaN + 1 ); // NaN alarm( 3 * NaN ); // NaN alarm( "keine Zahl" / 2 - 1 ); // NaN
Wenn es also irgendwo in einem mathematischen Ausdruck ein NaN
gibt, wird es auf das gesamte Ergebnis übertragen (es gibt nur eine Ausnahme: NaN ** 0
ist 1
).
Mathematische Operationen sind sicher
Mathe ist in JavaScript „sicher“. Wir können alles tun: durch Null dividieren, nicht numerische Zeichenfolgen als Zahlen behandeln usw.
Das Skript stoppt niemals mit einem schwerwiegenden Fehler („Die“). Im schlimmsten Fall erhalten wir als Ergebnis NaN
.
Spezielle numerische Werte gehören formal zum Typ „Zahl“. Natürlich sind es keine Zahlen im herkömmlichen Sinne dieses Wortes.
Mehr über die Arbeit mit Zahlen erfahren Sie im Kapitel Zahlen.
In JavaScript kann der Typ „Zahl“ keine Ganzzahlwerte sicher darstellen, die größer als (2 53 -1)
(das ist 9007199254740991
) oder kleiner als -(2 53 -1)
für Negative sind.
Um genau zu sein, kann der Typ „Zahl“ größere Ganzzahlen speichern (bis zu 1.7976931348623157 * 10 308
), aber außerhalb des sicheren Ganzzahlbereichs ±(2 53 -1)
tritt ein Genauigkeitsfehler auf, da nicht alle Ziffern passen in den festen 64-Bit-Speicher. Es kann also ein „ungefährer“ Wert gespeichert werden.
Diese beiden Zahlen (direkt über dem sicheren Bereich) sind beispielsweise gleich:
console.log(9007199254740991 + 1); // 9007199254740992 console.log(9007199254740991 + 2); // 9007199254740992
Das heißt, alle ungeraden ganzen Zahlen größer als (2 53 -1)
können überhaupt nicht im Typ „Zahl“ gespeichert werden.
Für die meisten Zwecke reicht ±(2 53 -1)
-Bereich völlig aus, aber manchmal benötigen wir den gesamten Bereich wirklich großer Ganzzahlen, z. B. für Kryptographie oder Zeitstempel mit Mikrosekundengenauigkeit.
Der Typ BigInt
wurde kürzlich zur Sprache hinzugefügt, um Ganzzahlen beliebiger Länge darzustellen.
Ein BigInt
-Wert wird erstellt, indem n
an das Ende einer Ganzzahl angehängt wird:
// das „n“ am Ende bedeutet, dass es ein BigInt ist const bigInt = 1234567890123456789012345678901234567890n;
Da BigInt
-Zahlen selten benötigt werden, behandeln wir sie hier nicht, sondern widmen ihnen ein eigenes Kapitel BigInt. Lesen Sie es, wenn Sie so große Zahlen benötigen.
Eine Zeichenfolge in JavaScript muss in Anführungszeichen gesetzt werden.
let str = "Hallo"; let str2 = 'Einfache Anführungszeichen sind auch in Ordnung'; let Phrase = `kann ein weiteres ${str} einbetten`;
In JavaScript gibt es drei Arten von Anführungszeichen.
Doppelte Anführungszeichen: "Hello"
.
Einfache Anführungszeichen: 'Hello'
.
Backticks: `Hello`
.
Doppelte und einfache Anführungszeichen sind „einfache“ Anführungszeichen. In JavaScript gibt es praktisch keinen Unterschied zwischen ihnen.
Backticks sind Anführungszeichen für „erweiterte Funktionalität“. Sie ermöglichen es uns, Variablen und Ausdrücke in einen String einzubetten, indem wir sie in ${…}
einschließen, zum Beispiel:
let name = „John“; // eine Variable einbetten alarm( `Hallo, ${name}!` ); // Hallo, John! // einen Ausdruck einbetten alarm( `das Ergebnis ist ${1 + 2}` ); // das Ergebnis ist 3
Der Ausdruck in ${…}
wird ausgewertet und das Ergebnis wird Teil der Zeichenfolge. Wir können dort alles einfügen: eine Variable wie name
oder einen arithmetischen Ausdruck wie 1 + 2
oder etwas Komplexeres.
Bitte beachten Sie, dass dies nur in Backticks möglich ist. Andere Zitate verfügen nicht über diese Einbettungsfunktion!
Alert( "das Ergebnis ist ${1 + 2}" ); // das Ergebnis ist ${1 + 2} (doppelte Anführungszeichen bewirken nichts)
Wir werden Strings im Kapitel Strings ausführlicher behandeln.
Es gibt keinen Charaktertyp .
In einigen Sprachen gibt es einen speziellen „Zeichen“-Typ für ein einzelnes Zeichen. In der Sprache C und in Java heißt es beispielsweise „char“.
In JavaScript gibt es keinen solchen Typ. Es gibt nur einen Typ: string
. Eine Zeichenfolge kann aus null Zeichen (leer sein), einem Zeichen oder mehreren davon bestehen.
Der boolesche Typ hat nur zwei Werte: true
und false
.
Dieser Typ wird üblicherweise zum Speichern von Ja/Nein-Werten verwendet: true
bedeutet „ja, richtig“ und false
“ bedeutet „nein, falsch“.
Zum Beispiel:
let nameFieldChecked = true; // Ja, das Namensfeld wird überprüft let ageFieldChecked = false; // Nein, das Altersfeld wird nicht überprüft
Boolesche Werte ergeben sich auch aus Vergleichen:
sei isGreater = 4 > 1; alarm( isGreater ); // wahr (das Vergleichsergebnis ist „ja“)
Wir werden boolesche Werte im Kapitel Logische Operatoren ausführlicher behandeln.
Der spezielle null
gehört zu keinem der oben beschriebenen Typen.
Es bildet einen eigenen Typ, der nur den null
enthält:
let age = null;
In JavaScript ist null
kein „Verweis auf ein nicht existierendes Objekt“ oder ein „Nullzeiger“ wie in einigen anderen Sprachen.
Es handelt sich lediglich um einen Sonderwert, der „nichts“, „leer“ oder „unbekannter Wert“ darstellt.
Der obige Code besagt, dass age
unbekannt ist.
Auch der Sonderwert undefined
sticht hervor. Es erstellt einen eigenen Typ, genau wie null
.
Die Bedeutung von undefined
ist „Wert ist nicht zugewiesen“.
Wenn eine Variable deklariert, aber nicht zugewiesen ist, ist ihr Wert undefined
:
altern lassen; Alarm(Alter); // zeigt „undefiniert“
Technisch gesehen ist es möglich, einer Variablen explizit undefined
zuzuweisen:
sei Alter = 100; // den Wert in undefiniert ändern Alter = undefiniert; Alarm(Alter); // "undefiniert"
…Aber wir empfehlen, das nicht zu tun. Normalerweise verwendet man null
, um einer Variablen einen „leeren“ oder „unbekannten“ Wert zuzuweisen, während undefined
als Standardanfangswert für nicht zugewiesene Dinge reserviert ist.
Der object
ist etwas Besonderes.
Alle anderen Typen werden „primitiv“ genannt, weil ihre Werte nur ein einziges Ding enthalten können (sei es eine Zeichenfolge oder eine Zahl oder was auch immer). Im Gegensatz dazu werden Objekte zum Speichern von Datensammlungen und komplexeren Entitäten verwendet.
Da sie so wichtig sind, verdienen Objekte eine besondere Behandlung. Wir werden uns später im Kapitel „Objekte“ mit ihnen befassen, nachdem wir mehr über Grundelemente erfahren haben.
Der symbol
wird verwendet, um eindeutige Identifikatoren für Objekte zu erstellen. Der Vollständigkeit halber müssen wir es hier erwähnen, aber auch die Details aufschieben, bis wir Objekte kennen.
Der Operator typeof
gibt den Typ des Operanden zurück. Dies ist nützlich, wenn wir Werte verschiedener Typen unterschiedlich verarbeiten oder einfach nur eine schnelle Überprüfung durchführen möchten.
Ein Aufruf von typeof x
gibt einen String mit dem Typnamen zurück:
typeof undefiniert // „undefiniert“ typeof 0 // „Nummer“ Typ von 10n // „bigint“ typeof true // „boolean“ typeof „foo“ // „string“ typeof Symbol("id") // "symbol" typeof Math // „Objekt“ (1) typeof null // „Objekt“ (2) Art der Warnung // „Funktion“ (3)
Die letzten drei Zeilen bedürfen möglicherweise einer zusätzlichen Erklärung:
Math
ist ein integriertes Objekt, das mathematische Operationen bereitstellt. Wir werden es im Kapitel Zahlen lernen. Hier dient es nur als Beispiel für ein Objekt.
Das Ergebnis von typeof null
ist "object"
. Dabei handelt es sich um einen offiziell anerkannten Fehler in typeof
, der aus den Anfängen von JavaScript stammt und aus Kompatibilitätsgründen beibehalten wird. null
ist definitiv kein Objekt. Es handelt sich um einen besonderen Wert mit einem eigenen Typ. Das Verhalten von typeof
ist hier falsch.
Das Ergebnis von typeof alert
ist "function"
, da alert
eine Funktion ist. Wir werden Funktionen in den nächsten Kapiteln untersuchen und dabei auch sehen, dass es in JavaScript keinen speziellen „Funktions“-Typ gibt. Funktionen gehören zum Objekttyp. Aber typeof
behandelt sie anders und gibt "function"
zurück. Auch das stammt aus den Anfängen von JavaScript. Technisch gesehen ist ein solches Verhalten nicht korrekt, kann aber in der Praxis praktisch sein.
Die typeof(x)
-Syntax
Möglicherweise stoßen Sie auch auf eine andere Syntax: typeof(x)
. Es ist dasselbe wie typeof x
.
Um es klar auszudrücken: typeof
ist ein Operator, keine Funktion. Die Klammern hier sind nicht Teil von typeof
. Es handelt sich um die Art von Klammern, die zur mathematischen Gruppierung verwendet werden.
Normalerweise enthalten solche Klammern einen mathematischen Ausdruck wie (2 + 2)
, aber hier enthalten sie nur ein Argument (x)
. Syntaktisch gesehen erlauben sie es, ein Leerzeichen zwischen dem typeof
und seinem Argument zu vermeiden, und manche Leute mögen es.
Manche Leute bevorzugen typeof(x)
, obwohl die Syntax typeof x
viel häufiger vorkommt.
Es gibt 8 grundlegende Datentypen in JavaScript.
Sieben primitive Datentypen:
number
für Zahlen jeglicher Art: Ganzzahl oder Gleitkommazahl, Ganzzahlen sind durch ±(2 53 -1)
begrenzt.
bigint
für ganze Zahlen beliebiger Länge.
string
für Saiten. Eine Zeichenfolge kann null oder mehr Zeichen enthalten, es gibt keinen separaten Einzelzeichentyp.
boolean
für true
/ false
.
null
für unbekannte Werte – ein eigenständiger Typ, der einen einzelnen Wert null
hat.
undefined
für nicht zugewiesene Werte – ein eigenständiger Typ, der einen einzelnen Wert undefined
hat.
symbol
für eindeutige Bezeichner.
Und ein nicht-primitiver Datentyp:
object
für komplexere Datenstrukturen.
Mit dem Operator typeof
“ können wir sehen, welcher Typ in einer Variablen gespeichert ist.
Wird normalerweise als typeof x
verwendet, aber typeof(x)
ist auch möglich.
Gibt eine Zeichenfolge mit dem Namen des Typs zurück, z. B. "string"
.
Denn null
gibt "object"
zurück – das ist ein Fehler in der Sprache, es handelt sich eigentlich nicht um ein Objekt.
In den nächsten Kapiteln konzentrieren wir uns auf Grundwerte und gehen, sobald wir mit ihnen vertraut sind, zu Objekten über.
Wichtigkeit: 5
Was ist die Ausgabe des Skripts?
let name = „Ilya“; Alert( `Hallo ${1}` ); // ? Alert( `Hallo ${"name"}` ); // ? alarm( `Hallo ${name}` ); // ?
Backticks betten den Ausdruck innerhalb von ${...}
in die Zeichenfolge ein.
let name = „Ilya“; // der Ausdruck ist eine Zahl 1 Alert( `Hallo ${1}` ); // Hallo 1 // der Ausdruck ist ein String „name“ Alert( `Hallo ${"name"}` ); // Hallo Name // Der Ausdruck ist eine Variable, betten Sie ihn ein alarm( `Hallo ${name}` ); // Hallo Ilja