Datentypen

Datentypen

In anderen Programmiersprachen bekommen Variablen beim Deklarieren einen Datentyp zugewiesen. Dadurch wird festgelegt wieviel Speicherplatz im Hauptspeicher für eine Variable oder für ein Literal reserviert wird. Ein Literal ist ein Wert. Es wird auch festgelegt was für eine Art von Information im Hauptspeicher gespeichert werden kann.

In Javascript haben wir eine lose Typisierung (loose Typing). Der Datentyp wird nicht festgelegt, er wird anhand des Wertes ermittelt und kann sich auch ändern.

In Javascript gibt es 6 Datentypen

Array, ist kein eigener Datentyp, jedoch ist ein Array äußerst wichtig.

Die primitiven Datentypen

Im Gegensatz zum Datentyp Object (der als Container für viele Werte dient) sind primitive Datentypen „einfache“ Werte. Sie enthalten immer nur genau eine Information.

String (Zeichenkette)

Ein String wird für Text verwendet. Du musst den Text immer in Anführungszeichen einschließen – entweder in doppelte ("..."), einfache ('...') oder Backticks (`...`).
Mehr dazu unter String

JavaScript
let name = "Anja";
let begrussung = 'Hallo';  

Der Plus-Operator bei Strings:

Wenn du das Pluszeichen + bei Strings verwendest, werden die Texte nicht mathematisch addiert, sondern aneinandergehängt (konkateniert):

JavaScript
let ergebnis = "10" + "20"; 
// Ergibt den Text "1020", nicht die Zahl 30!

Number (Zahlen)

JavaScript unterscheidet im Gegensatz zu anderen Sprachen nicht zwischen Ganzzahlen (Integern) und Kommazahlen (Floats). Alles ist einfach eine Number. Wichtig: Bei Kommazahlen wird im Englischen ein Punkt statt eines Kommas verwendet.
mehr dazu unter Number

JavaScript
let alter = 28;// Ganzzahl  
let preis = 19.99;   // Kommazahl (mit Punkt!)  

Vorsicht beim Mixen (String + Number):

Wenn du eine Zahl und einen String mit + verbindest, verwandelt JavaScript die Zahl automatisch in einen String und hängt sie an. Das nennt man Type Coercion:

JavaScript
let summe = 10 + "20"; 
// Ergibt "1020", weil die Zahl 10 zum Text wird!

let echteSumme = 10 + 20; 
// Ergibt die Zahl 30  
 

Boolean (Boolescher Wert)

Ein `Boolean` ist ein logischer Zustand und kann exakt nur einen von zwei Werten annehmen: `true` (wahr) oder `false` (falsch). Man braucht sie ständig für Bedingungen (Wenn-Dann-Abfragen).
mehr dazu unter Boolean

let istEingeloggt = true;
let hatBezahlt = false; 

Die speziellen Datentypen

Während alle anderen Datentypen dazu da sind, konkrete Inhalte (wie Texte, Zahlen oder Zustände) zu speichern, sind diese beiden Typen die Spezialisten für das Nichts – sie beschreiben auf unterschiedliche Weise, dass ein Wert fehlt oder noch nicht existiert.

undefined (Undefiniert)

Wenn du eine Variable zwar deklarierst (anlegst), ihr aber noch keinen Wert zuweist, hat sie automatisch den Wert undefined. Es bedeutet schlicht: „Die Box existiert, aber es ist noch nichts drin.“ Man kann undefined nicht selber vergeben, sondern nur abfragen.

JavaScript
let vorname;
console.log(vorname); // Gibt 'undefined' aus  

null (Nullwert)

null ist ein bewusst gesetzter „Leerwert“. Damit sagst du JavaScript explizit: „Diese Variable ist absichtlich leer.“

JavaScript
let aktuellerGast = null; // Im Moment gibt es keinen Gast  

Der feine Unterschied:

  • undefined = Unbeabsichtigt leer (JavaScript weiß noch nichts damit anzufangen).

  • null = Absichtlich leer (Du hast als Entwickler entschieden, dass hier gerade kein Wert existiert).

Der Datentyp: Object (Objekte)

Der Datentyp Object nimmt in JavaScript eine Sonderrolle ein. Während primitive Datentypen (wie String, Number oder Boolean) immer nur einen einzelnen Wert speichern, ist ein Objekt ein komplexer Container. Er erlaubt es dir, viele zusammenhängende Werte und sogar Funktionen in einer einzigen Variable zu bündeln.

Man unterscheidet in der Praxis meist zwei Wege, wie uns dieser Datentyp begegnet:

  1. Das Objekt-Literal: Der direkte Weg, bei dem wir Daten mit geschweiften Klammern {} strukturiert aufschreiben (z. B. let user = { name: "Max", alter: 25 };).

  2. Klassen-Instanzen: Objekte, die als „Abbild“ aus einem Bauplan (einer class) mit dem Befehl new erzeugt wurden.

Merke: Egal, ob du ein einfaches Objekt-Literal tippst, eine Instanz einer Klasse erstellst oder sogar mit einem Array arbeitest – im Hintergrund von JavaScript läuft all das unter dem übergeordneten Datentyp Object.

 

Primitive Datentypen und Referenztypen

Bei primitiven Datenypen wird der Wert gespeichert, bei Referenztpyen wie Object wird ein Zeiger auf das Objekt gespeichert. Das hat folgende Auswirkungen:

var x = 2;
var y = x;
x=4;
console.log(y) // Ausgabe: 2

Bei der Initialisierung von y wird der Wert der Variablen x in y gespeichert, aber es wird nicht ein Zeiger auf x gespeichert, denn dann würde sich der Wert von y ändern, wenn man den Wert von x ändert. Genau das ist bei Referenztypen der Fall.

Datentyp ermitteln

Es gibt 2 Operatoren, die der Ermittlung des Datentyps dienen, typeof und instanceof beides sind unäre Operatoren, das heißt sie benötigen nur einen Operanden.

typeof

Bei typeof werden die einzelnen primitven Datentypen geliefert und bei allen Referenztypen der Wert object. Das lässt sich testen mit
console.log(typeof 3);

typeof true //boolean
typeof 34 //number
typeof "Hallo" // string
typeof {} // object
typeof function(){} // function
typeof [] // object

typeof dient dazu

Beispiel

instanceof

Object ist der Typ von dem alle Referenztypen ableiten. Mit typeof kann man den genauen Referenztyp nicht ermitteln. Dazu dient der instanceof Operator. Er lässt sich nur auf Werte, die einen Referenztyp enthalten anwenden.

var team = ["Klaus", "Willi", "Rita"];

console.log(team instanceof Array); //true
console.log(team instanceof Object); // true
console.log(team instanceof Function); //false
console.log(34 instanceof Object); //false

Datentyp umwandeln / Casting

Man kann einen Datentyp umwandeln in einen anderen Datentyp. Das nennt man Casting. Mehr dazu hier

Nehmen wir an, aus einer prompt Box soll eine numerische Eingabe verwertet werden. Die Prompt Box liefert jedoch nur Strings, die man jedoch als numerischen Wert benötigt um etwas zu berechnen. Hier kommt dann das Casting ins Spiel. In der Variable wert hat man nun einen numerischen, berechenbaren Wert.

let eingabe = "3" ;
let wert = Number(eingabe);

Referenztypen und primitve Datentypen

Neben den primitiven Datentypen und den speziellen Datentypen (null, undefined) gibt es die Referenzdatentypen wie Object. Der Unterschied besteht darin, dass bei Referenztypen die Daten anders gespeichert werden als bei den primitiven Datentypen.

Nehmen wir folgendes Beispiel

let x = 3;
let y = x;
x = 5;
console.log(y); //3

Der Computer reserviert für jede Variable einen Speicherplatz. Wenn ich einer Variable eine andere Variable als Wert übergebe, wird nur der Wert der Variablen übergeben, nicht die Variable selbst.

Bei Referenztypen ist das anders. Wenn man ein Object einer anderen Variablen als Wert zuweist wird ein Zeiger auf das übergebene Objekt gelegt. Das bedeutet, wenn man eins der beiden ändert, ändert sich auch das andere.

let a={width: 100}
let b = a;
a.width = 1;
console.log(b.width); //1
b.width = 5;
console.log(a.width) //5

Bei Variablen primitiven Datentyps kopiert der Computer den gesamten Wert in die Speicheradresse.

Bei Variablen mit Referenztyp wird nur eine Referenz auf das übergebene Objekt gespeichert.

Es gibt folgende Referenztypen

Object
Object repräsentiert alle Arten von Objekten
Array
siehe dazu Arrays
RegExp
Reguläre Ausdrücke siehe hier
Date
Referenztyp Date für Datums und Zeitangaben
Math
Mit dem Referenztyp Math lassen sich komplexe Berechnungen erstellen.

 


Objekte in Javascript siehe w3schools

Eigene Klassen und Objekte siehe w3schools


Number

Javascript Tipps