Javascript

Beschreibung

  • Dynamisches Typenkonzept
  • Objektorientierter und funktionaler Stil möglich

positiv

  • Mächtige unde moderne Sprachkonzepte
  • Leistungsfähige Laufzeitumgebungen

negativ

  • Design Mängel aus den Anfangstagen
  • Grundlegende Änderungen nicht möglich, da nur Erweiterungen möglich sind

Standards

  • ECMAScript
  • versionen
    • ES3: 2000 - 2010 (verbreitete Version)
    • ES4: Übung 2008 abgebrochen
    • ES5: 2009, kleineres Update
    • ES6: 2015, umfangreiche Neuerungen
    • ES7, Javascript 2016
    • Nun jährliche Updates
  • Transpiler: Babel

Console

### Formatiertes ausgeben

let x = 30;
console.log("the value of x is ", x);
// -> the value of x is 30

console.log("my %s has %d ears", 'cat' 2);
// -> my cat has 2 ears

Konsole löschen

console.clear()

Stack trace ausgeben

Wird bei Fehlern oft automatisch ausgegeben.

console.trace()

Zeit messen

console.time()
console.log("Welcome to Programiz!");
console.timeEnd()
// default: 3.572ms

### Fehler ausgeben

console.error()

Zahlen

  • Zahlentyp in JavaScript: Number
  • 64 Bit Floating Point entsprechend IEEE 754 (double in Java)
  • Enthält alle 32 Bit Ganzzahlen
  • Konsequenz alle Java int auch in JavaScript exakt dargestellt
  • Weitere Konsequenz: oft Rechnunggenauigkeit mit Zahlen mit Nachkommastellen

## Zahlenliterale

| Typ | Beispiel | | Ganzzahlliteral | 17 | | Dezimalstellen | 3.14 | | Dezimalpunktverschiebung (*10^x) | 2.998e8 |

Nicht exakte Zahlen

0.1 = 0x3FB999999999999A, entspricht nicht exakt 0.1 0.25 // hexadezimal 3FD0000000000000, entspricht exakt 0.25

Ausdrücke

  • Rechenoperationen wie in Java
  • Spezielle Zahlen: Infinity, -Infinity, NaN
100 + 4 * 11 		// 114
(100 + 4) * 11 		// 1144
314 % 100 			// 14

1/0					// Infinity
Infinity + 1		// Infinity
0/0					// NaN (Not a Number)

BIGINT

  • Mit ES2020 eingeführt
  • Lieterale mit angehängem n
  • Keine automatische Typumwandlung von/zu Number
1n + 2n				// 3n
2n ** 128n			// 340282366920938463463374607431768211456n

BitInt(1)			// 1n
Number(1n)			// 1

1n + 1				// Cannot mix BigInt and other types

Typeof

  • Operator, der TypString seines Operanden liefert
typeof(12)			// 'number'
typeof(2n)			// 'bigint'
typeof(Infinity)	// 'number'
typeof(NaN)			// 'number'
typeof('number')	// 'string'

## Strings

  • Sequenz von 16-Bit-Unicode-Zeichen
  • Kein spezieller char-Typ
  • Strings mit "..." und '...' verhalten sich gleich

String-Verkettung

`con` + "cat" + 'enate' // 'concatenate'

Escape Sequencen

SequenzBedeutung
\\Backslash
\nnewline
\rcarriage return
\vvertical tab
\bbackspace
\fform feed
\uXXXX (4 Hexziffern) UTF-16 code unit
\xXX (2 Hexziffern)ISO-8859-1 character
\XXX (1-3 Oktalziffern) ISO-8859-1 character

Template Strings

  • \ wird als \ interpretiert (Ausnahme vor `, $ und Leerzeichen)
  • Kann Zeilenwechsel enthalten
  • String-Interpolation: Werte in String einfügen
`half of 100 is ${100 / 2}`		// half of 100 is 50
`erste Zeile
zweite Zeie`					// 'erste Zeile\nzweite Zeil'

Logische Ausdrücke

  • Typ boolean mit Werten: true / false
  • Vergleiche liefern Ergebnis vom Typ boolean
  • Logische Operatoren entsprechen denen in C und Java
  • Strings sind Werte: Vergleich mit == ist kein Problem
typeof(true)				// 'boolean'
3 > 4						// false
1 < 2 && 2 < 3				// true
4 >= 5 || !(1 == 2)			// true
"ab" == "a" + "b"			// true

NaN == NaN					// false

Spezielle Werte

null 						// null
undefined					// undefined

let wert					// wert = undefined
wert						// undefined