Datentypen
Dauer: 20 Minuten
- Variablen
- Konstanten
Ziel: Datentypen in JavaScript verstehen
Vorbemerkung: statisch vs. dynamisch typisiert
Ein wichtiges Programmiersprachenprinzip ist das der Typisierung: ist eine Sprache statisch oder dynamisch typisiert?
Java hat ein statisches Typsystem (wie u.a. auch C#). Grob bedeutet dies, dass u.a. der Typ einer Variablen statisch festgelegt wird, nicht verändert werden kann und nur typkompatible Werte zugewiesen werden dürfen.
JavaScript hat ein dynamisches Typsystem (wie u.a. auch Python). Hier können sich die Typen von Variablen durch beliebige Wertzuweisungen ändern.
Java is to JavaScript as ham is to hamster (or car is to carpet)
(Für den Vergleich von Java mit JavaScript wird nochmals auf diese Tabelle verwiesen.)
Die überaus populäre „Spracherweiterung“ TypeScript ergänzt JavaScript mit statischen Typen und zusätzlichen Sprachkonstrukten wie z.B. Interfaces und Generics.
Übersicht
In JavaScript gibt es u.a. folgende Datentypen:
number
– sowohl für ganze Zahlen (z.B.108
) als auch für Gleitkommazahlen (z.B.3.14
)
⟶ im Gegensatz zu anderen Programmiersprachen nur ein numerischer Datentyp!string
– Zeichenketten bzw. Text beliebiger Längeboolean
– die beiden Wahrheitswertetrue
undfalse
object
– Arrays/Felder, Objekte/Dictionaries (nicht objektorientiert) und Funktionennull
undundefined
für (noch) nicht vorhandene und undefinierte Werte.
Außerdem gibt es den Symbol-Typ, den wir nicht behandeln werden.
JavaScript ist dynamisch typisiert: bei Variablen-/ Konstantendeklarationen und Funktionsdefinitionen werden keine Datentypen angegeben. Diese werden dynamisch zur Laufzeit ermittelt.
number
number
deckt ganze Zahlen und Gleitkommazahlen ab.
Gleitkommazahlen: Schreibweise mit Punkt (.
) statt wie im Deutschen üblich mit Komma, z.B. 3.14
Zusätzlich gibt es noch spezielle Werte wie NaN
(not a number)
oder Infinity
.
100 / "sinnloser String" ; // --> ergibt NaN
100 / 0 ; // --> ergibt Infinity
Was ergibt 0.1 + 0.2
?
Die Antwort wird hier erklärt: 0.30000000000000004.com
⟶ Relevant für alle Programmiersprachen…
Die Hintergründe werden eventuell in anderen Vorlesungen besprochen (Digitaltechnik?)
Wahrheitswerte
Der Typ für logische Wahrheitswerte heißt boolean
.
Es gibt nur zwei mögliche Werte für diesen Typen:
true
und false
.
string
Text-Werte werden Zeichenketten oder Strings genannt.
Es gibt drei verschiedene Arten, in JavaScript Strings zu deklarieren:
let s1 = "String mit doppelten Anführungszeichen";
let s2 = 'String mit einfachen Anführungszeichen';
let s3 = `String mit Backtick oder schrägem Apostroph`;
In allen drei Fällen erhalten wir Strings. Die Begrenzer (Anführungszeichen) dürfen nicht vermischt werden.
Für einzelne Zeichen gibt es keinen Datentyp char
wie in Java —
auch 'a'
ist ein String.
Template-Strings
Wenn ein String mit ` ` umgeben wird, dann handelt es
sich um einen sogenannten Template-String. Praktisch ist die
String-Interpolation mit Template-Strings. Durch ${...}
können
innerhalb von ` ` dynamisch beliebige JavaScript-Ausdrücke
eingesetzt werden:
`ein String mit Interpolation ${2+3}`
// --> dies ergibt den String
// ein String mit Interpolation 5
Strings lassen sich somit im Vergleich zu kombinierten
Strings mit +
(sogenannte String-Konkatenation) auf
übersichtlichere Weise z.B. mit Variablenwerten zusammensetzen:
let firstName = 'Jane';
let lastName = 'Smith';
// gewöhnliche String-Konkatenation:
console.log("Der Name lautet " + firstName + " " + lastName);
// kompakter mit Template-Strings:
console.log(`Der Name lautet ${firstName} ${lastName}`);
Hinweis: In Template-Strings funktionieren maskierte Zeichen wie z.B. \n
nicht.
Objekte, Arrays und Funktionen
Diese behandeln wir später. Nur ein kurzes Beispiel:
// ein Array (sozusagen eine Liste):
let list = [1,2,3,4];
// ein Objekt:
let person = {firstName: 'Jane', lastName: 'Smith'};
typeof
typeof
ist ein Operator,
der den Namen des Typs für einen JavaScript-Ausdruck ergibt.
Dadurch kann der Typ z.B. für Variablen oder Funktionsparameter zur Laufzeit herausgefunden werden.
typeof "Hallo"; // --> ergibt "string"
typeof 2; // --> ergibt "number"
typeof false; // --> ergibt "boolean"
Achtung: für Arrays ergibt typeof
den Wert "object"
, für
Funktionen kommt jedoch "function"
heraus:
typeof [1,2,3,4,5]; // --> ergibt "object"
typeof console.log; // --> ergibt "function"