Datentypen
Dauer: 35 Minuten
- Primitive Datentypen in JavaScript
number
,string
,boolean
,object
,undefined
typeof
-Operator
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 Funktionenundefined
für (noch) nicht vorhandene und undefinierte Werte (Bemerkung: es gibt auch den Wertnull
für „nichts/leer“ oder „kein Wert“)
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 = 'Jane';
let = 'Smith';
// gewöhnliche String-Konkatenation:
.("Der Name lautet " + + " " + );
Der Name lautet Jane Smith
// kompakter mit Template-Strings:
.(`Der Name lautet ${} ${}`);
Der Name lautet Jane Smith
Hinweis: In Template-Strings funktionieren maskierte Zeichen wie z.B. \n
nicht.
In der gemeinsam entwickelten Wetter-App verwenden wir nun Template-Strings, um Textinformation zusammenzusetzen.
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'};
undefined
undefined
ist ein eigener Datentyp in JavaScript und
bedeutet, dass eine Variable deklariert, aber nicht initialisiert wurde.
Beispiele für Situationen mit undefined
:
- Automatisch von JavaScript zugewiesen, wenn einer Variablen kein Wert zugewiesen ist.
- Rückgabewert von Funktionen, die keinen return-Wert haben.
- Zugriff auf nicht vorhandene Eigenschaften eines Objekts.
let myVariable; // myVariable deklariert, nicht initialisiert
console.log(myVariable); // Ausgabe: undefined
function myFunction() {}
console.log(myFunction()); // Ausgabe: undefined
// @log: undefined
let myObject = {};
console.log(myObject.key); // Ausgabe: undefined
undefined
ist ein Datentyp, der nur einen Wert hat: undefined
.
Es gibt auch den speziellen Wert null
, der für „nichts/leer“
oder „kein Wert“ steht. null
wird bewusst zugewiesen, um zu zeigen,
dass eine Variable oder eine Objekteigenschaft keinen Wert hat
(„leerer“ oder „nicht vorhandenen“ Zustand eines Objekts).
null
hat den Datentyp object
, was ein historischer Fehler
im Design von JavaScript ist. Konsistenter wäre es z.B., wenn null
den
eigenen Datentyp null
hätte. Letztendlich ist dies aber nicht gravierend für die alltägliche Arbeit mit JavaScript.
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"
Funktionen sind Objekte in JavaScript, daher ist der Typ
"function"
ein Spezialfall des Typs "object"
und
wird in der Programmierung verwendet, um Funktionen von
anderen Objekten zu unterscheiden.