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änge
  • boolean – die beiden Wahrheitswerte true und false
  • object – Arrays/Felder, Objekte/Dictionaries (nicht objektorientiert) und Funktionen
  • undefined für (noch) nicht vorhandene und undefinierte Werte (Bemerkung: es gibt auch den Wert null 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.