JavaScript-Tutorium:Grundlagen
Ziel
Einführung
Herkunft
- Erfunden von Brendan Eich bei Netscape
- Adaptiert von Microsoft und JScript benannt
- Erfährt anbieterspezifische Implementierungen (im sogenannten Browser-Krieg)
- Wird überreicht an ECMA und seitdem standardisiert als ECMAScript
Charakteristika
- Syntax is von C inspiriert
- Hat nichts zu tun mit Java
- Interpretiert, nicht kompiliert
- Looses Typsystem
- Objektorientiert
- Unterstützt funktionales Programmieren
- Läuft in vielen verschiedenen Umgebungen
Umgebungen
- Browser: Firefox, Chrome, Internet Explorer, Safari, Opera
- Server: NodeJS, Windows Scripting Host, Rhino
- Applikationen: Adobe Photoshop, Quartz Composer
- Betriebssysteme: GNOME
Engines
- SpiderMonkey/JägerMonkey: Firefox, GNOME
- V8: Chrome, NodeJS
- Trident/Chakra: Internet Explorer
ECMAScript Versionen
- ES3 ist vollständig implementiert von sehr vielen Browsern
- ES5 ist vollständig implementiert von IE9+, FF4+, Chrome7+
- ES.next/Harmony ist von keinem Browser vollständig implementiert
Schlüsselwörter
Folgende Wörter sind für die Sprache selbst reserviert und können nicht als Variablennamen verwendet werden:
abstract
boolean break byte
case catch char class const continue
debugger default delete do double
else enum export extends
false final finally float for function
goto
if implements import in instanceof int interface
long
native new null
package private protected public
return
short static super switch synchronized
this throw throws transient true try typeof
var volatile void
while with
Die Auswahl der Begriffe orientierte sich stark an der Sprache Java. Einige der Begriffe finden in JavaScript aktuell keine Verwendung.
Variablen
In JavaScript wird das Schlüsselwort var verwendet um Variablen zu deklarieren (und zu initialisieren).
Definition und Zuweisung
Variablen können unmittelbar bei der Deklaration definiert werden:
var a = 1;
console.log(a);
Oder auch zu späteren Zeitpunkten:
var a;
a = 1;
console.log(a);
Eine Typabgabe ist nicht notwendig da es sich nicht um eine stark typisierte Sprachen handelt.
var a = 1;
a = true;
console.log(a);
Wie auch in anderen Sprachen sind Mehrfachzuweisungen erlaubt:
var e, f, g;
e = f = g = 3;
console.log(e);
console.log(f);
console.log(g);
Eine erneute Deklaration einer bereits bestehenden Variable führt zu keinem Fehler, sollte allerdings vermieden werden:
var h = false;
var h = true;
console.log(h);
Hoisting
Hoisting bedeutet dass der JavaScript-Interpreter alle Variablendefinitionen vor der eigentlichen Ausführung des Codes innerhalb der umgebenden Funktion nach oben an den Anfang schiebt. Dies betrifft ausschließlich die Definitionen, nicht aber die initiale Belegung mit einem Wert.
Augenscheinlich kann man Code schreiben der Variablen verwendet bevor sie überhaupt definiert sind. Da jedoch die initiale Wertzuweisung nicht vom Interpreter verschoben wird kann dies zu unerwarteten Resultaten führen.
console.log(a);
var a = 5;
Globale Variablen
In der Regel besitzt eine JavaScript-Umgebung ein globales Objekt, welches alle globalen Properties beherbergt. Im Browser wird das globale Objekt über die Variable `window` verfügbar gemacht. In Node.JS heisst es `global`. Falls eine Variable nicht innerhalb einer Funktion definiert wird, wird diese automatisch an das globale Objekt angehängt.
var a = new Object();
console.log('is a global?', a === window.a);
var someFunction = function() {
var b = new Object();
console.log('is b global?', b === window.b);
}
someFunction();
Achtung: Wird das Schlüsselwort `var` vergessen, wird die Variable implizit als globale Variable definiert.
var someFunction = function() {
a = 1;
}
someFunction();
console.log(a);
console.log(window.a);
