Movatterモバイル変換


[0]ホーム

URL:


Zum Inhalt springen
WikipediaDie freie Enzyklopädie
Suche

JavaScript

aus Wikipedia, der freien Enzyklopädie
JavaScript
// Beispiel JavaScriptfunctionhalloWelt(){alert('Hello World');}window.addEventListener('load',halloWelt);
Basisdaten
Paradigmen:multiparadigmatisch
Erscheinungsjahr:1995
Designer:Brendan Eich
Entwickler:Brendan Eich
Aktuelle Version:ECMAScript 2023[1]  (Juni 2023)
Typisierung:schwach,dynamisch,duck
WichtigeImplementierungen:SpiderMonkey,Rhino,JavaScriptCore,V8
Beeinflusst von:Self,C,Scheme,Perl,Python,Java,Lua
Beeinflusste:ActionScript,Haxe,CoffeeScript,Dart,TypeScript
Lizenz:BSD
www.ecma-international.org/publications-and-standards/standards/ecma-262/

JavaScript (kurzJS) ist eineSkriptsprache, die ursprünglich 1995 vonNetscape fürdynamisches HTML inWebbrowsern entwickelt wurde, um Benutzerinteraktionen auszuwerten, Inhalte zu verändern, nachzuladen oder zu generieren und so die Möglichkeiten vonHTML zu erweitern.[2] Heute wird JavaScript auch außerhalb von Browsern angewendet, etwa auf Servern und in Microcontrollern.[3][4]

Der heutige Name der ursprünglichLiveScript genannten Sprache entstand 1996 aus einer Kooperation von Netscape mitSun Microsystems. DerenJava-Applets, erstellt mit der gleichfalls 1995 veröffentlichten ProgrammierspracheJava, wurden mithilfe von LiveScript in denNetscape Navigator integriert. Um die Popularität von Java zu nutzen, wurde LiveScript in JavaScript umbenannt, obwohl die beiden Sprachen voneinander unabhängig entwickelt wurden und völlig unterschiedliche Grundkonzepte aufweisen.

Der alsECMAScript (ECMA 262) standardisierte Sprachkern von JavaScript beschreibt einedynamisch typisierte,objektorientierte, aberklassenlose Skriptsprache. Sie wird allen objektorientiertenProgrammierparadigmen unter anderem auf der Basis vonPrototypen gerecht, derenDeklaration ab ECMAScript 6 mit einer Syntax ermöglicht wird, wie sie ähnlich auch bei klassenbasierten Programmiersprachen üblich ist. In JavaScript lässt sich je nach Bedarfobjektorientiert,prozedural oderfunktional programmieren.[5]

Entwicklung

[Bearbeiten |Quelltext bearbeiten]

DieSyntax von JavaScript ähneltC-Abkömmlingen. Trotz der Namens- und syntaktischen Ähnlichkeit hat JavaScript nur geringe Gemeinsamkeiten mitJava. So wird in JavaScript Vererbung nicht durchKlassen, sondern durchPrototypen unterstützt.

JavaScript wurde früher hauptsächlichclientseitig eingesetzt. JavaScript bzw. die ECMAScript-Implementierungen ermöglichen aber beispielsweise mit demFrameworkNode.js[6] und alsJScript bzw.JScript .NET in einerASP- bzw.ASP.NET-Umgebung aufMicrosoft Internet Information Services auch serverseitige Anwendungen. Weitere Beispiele für serverseitige JavaScript-Programmierung sind POW und Jaxer, die auf der Mozilla-JavaScript-EngineSpiderMonkey aufsetzen, V8CGI, welches auf der JavaScript-ImplementierungV8 aufbaut und in denApache HTTP Server integriert wird, sowieQML, eine erweiterte Form von JavaScript zum Zeichnen von Oberflächen und Animationen.

Die Sprache wird auch als Skriptsprache für Spiele undAnwendungsprogramme eingesetzt, da der Sprachkern nur wenige Objekte enthält und dadurch der zur Ausführung von in JavaScript formulierten Skripten erforderlicheInterpreter relativ klein gehalten werden kann.

Außerdem wird JavaScript als Verkehrssprache in der DatenbankMongoDB sowie in Microcontrollern eingesetzt.[3][4]

Verwendung

[Bearbeiten |Quelltext bearbeiten]

Typische Anwendungsgebiete

[Bearbeiten |Quelltext bearbeiten]

Typische Anwendungsgebiete von JavaScript im Webbrowser sind:

  • dynamische Manipulation von Webseiten über dasDocument Object Model
  • Plausibilitätsprüfung (Datenvalidierung) von Formulareingaben noch vor der Übertragung zum Server
  • Anzeige von Dialogfenstern
  • Senden und Empfangen von Daten, ohne dass der Browser die Seite neu laden muss (Ajax)
  • Vorschlagen von Suchbegriffen während der Eingabe
  • Werbebanner oder Laufschriften
  • Verschleierung vonE-Mail-Adressen zur Bekämpfung vonSpam
  • mehrereFrames auf einmal wechseln oder die Seite aus dem Frameset lösen
  • Schreib- und Lesezugriff aufCookies und denWeb Storage innerhalb des Browsers

Missbrauch

[Bearbeiten |Quelltext bearbeiten]

Einige Anwendungen, die mit JavaScript möglich sind, agieren teilweise gegen den Wunsch des Benutzers oder widersprechen demPrinzip der geringsten Überraschung. Einige Browser bieten daher Funktionen an, die derartige JavaScript-Funktionen unterdrücken.

Beispiele:

Hinweis im Firefox-Browser bei vielen Dialogfenstern
  • Verschleiern der Internetadresse, auf die ein gegebenerLink verweist
  • Deaktivieren desKontextmenüs, um zu erschweren, dass Bilder oder die gesamte Seite abgespeichert werden können
  • Deaktivieren derKopierfunktion, um zu erschweren, dass Texte oder Bilder kopiert werden können
  • Unaufgeforderte (Werbe-)Pop-ups oderPop-unders oder aufeinanderfolgendeDialogfenster, die den Benutzer behindern
  • Ungewolltes Schließen des Browserfensters
  • Ungewollte Größenänderung des Browserfensters
  • Barrierearme Webseiten zeichnen sich dadurch aus, dass sie auch bei abgeschaltetem JavaScript möglichst uneingeschränkt nutzbar bleiben. Teilweise schränkt das deaktivierte JavaScript die Benutzbarkeit einer Webseite ein.
  • Maßnahmen, die an den Sicherheitseinstellungen des Browsers vorbei ein Wiedererkennen eines Benutzers bei einem späteren Besuch einer Website erlauben (sieheAnonymität im Internet)
  • Bei anfälligen Webanwendungen kann JavaScript auch von Dritten missbraucht werden, etwa perXSS (Codeeinschleusung).

Geschichte

[Bearbeiten |Quelltext bearbeiten]

Am 18. September 1995 veröffentlichteNetscape mit der Vorversion desNavigators 2.0 einen Browser mit einer eingebetteten Skriptsprache, die zu diesem ZeitpunktLiveScript hieß und vonBrendan Eich entwickelt worden war. Die Sprache konnte u. a. Formulareingaben des Benutzers vor dem Absenden überprüfen. Am 4. Dezember 1995 verkündeten Netscape undSun Microsystems eine Kooperation, die die Interaktion von LiveScript direkt mit Java-Applets zum Ziel hatte. Sun entwickelte die nötigen Java-Klassen, Netscape die SchnittstelleLiveConnect und benannte die Sprache inJavaScript um (JavaScript 1.0).[7][8]JavaScript ist seit der Übernahme von Sun Microsystems eineMarke des UnternehmensOracle.[9]

Mit der erstenBeta-Version des Navigators 3.0 führte Netscape am 29. April 1996 JavaScript 1.1 ein. In selbiger Version gab es die Neuerungen, auf Bilder zugreifen und sogenannteRollover-Grafiken erstellen zu können.LiveConnect war jetzt fester Bestandteil des Browsers. Mit der Beta-Version desInternet Explorers 3 stellte Microsoft im Mai 1996 seinen ersten JScript-fähigen Browser vor. Dies war der Beginn desBrowserkriegs.[10][11]

Mit der Ankündigung desNetscape Communicators wurde JavaScript 1.2 am 15. Oktober 1996 veröffentlicht; der Netscape Communicator 4.0 mit JavaScript 1.2 erschien jedoch erst am 4. Juni 1997. Ebenfalls im Juni 1997 veröffentlichte dieEuropean Computer Manufacturers Association ihren Standard ECMA-262(ECMAScript), der zusammen mit Netscape entwickelt worden war und die Grundelemente einer Skriptsprache standardisieren sollte. Diese wurde im April 1998 zur ISO-NormISO/IEC 16262:1998 Information technology – ECMAScript language specification. Am 1. Oktober 1997 kam der Internet Explorer 4 heraus, der den Sprachumfang von JavaScript 1.1 abdeckte. Darüber hinaus wurden eigene Erweiterungen veröffentlicht, die zu Kompatibilitätsunterschieden zwischen Navigator und Internet Explorer führten und eine DOM-ähnliche Syntax zur Verfügung stellten, die es ermöglichte, auf alle Elemente der Webseite zuzugreifen und diese beliebig verändern zu können.

Der in Java implementierte JavaScript-InterpreterRhino wurde ab Version 6.0 als Teil derJava-Laufzeitumgebung standardmäßig mitgeliefert.[12] Im Juli 1998 wurde mit der Beta-Version des Netscape Communicators 4.5 JavaScript 1.3, welche schon in der Version 4.06 des Netscape Communicators vorhanden war, veröffentlicht.[13] Im Oktober 1998 stellte Netscape JavaScript 1.4 vor. Diese Version war vollständig kompatibel mit ECMA-262. Ein Browser mit der Unterstützung dieser Version erschien jedoch nicht.[14][15] Im April 2000 kam mit der Preview Release 1 des Navigators 6 JavaScript 1.5 und DOM Level 1. Am 5. Juni 2002 erschien Mozilla 1.0 mit JavaScript 1.5 (JavaScript in der Version 1.5 entspricht ECMA-262 Version 3),[16] am 29. November 2005Mozilla Firefox 1.5 mit JavaScript 1.6[17], am 12. Juli 2006 Mozilla Firefox 2.0b1 mit JavaScript 1.7[18] und am 18. Dezember 2007 Mozilla Firefox 3.0b2 mit JavaScript 1.8.[19]

Versionsgeschichte von JavaScript

[Bearbeiten |Quelltext bearbeiten]
Versionsgeschichte[20]
VersionVeröffentlichungEntsprechungNetscape NavigatorMozilla FirefoxInternet ExplorerOperaSafariGoogle Chrome
Ältere Version; nicht mehr unterstützt: 1.0.0März 19962.03.0
Ältere Version; nicht mehr unterstützt: 1.1.0August 19963.0
Ältere Version; nicht mehr unterstützt: 1.2.0Juni 19974.0–4.05
Ältere Version; nicht mehr unterstützt: 1.3.0Oktober 1998ECMA-262 1st edition / ECMA-262 2nd edition4.06–4.7x4.0
Ältere Version; nicht mehr unterstützt: 1.4.0Netscape Server
Ältere Version; nicht mehr unterstützt: 1.5.0November 2000ECMA-262 3rd edition6.01.0
  • 5.5 (JScript 5.5)
  • 6 (JScript 5.6)
  • 7 (JScript 5.7)
  • 8 (JScript 6)
  • 6.0
  • 7.0
  • 8.0
  • 9.0
Ältere Version; nicht mehr unterstützt: 1.6.0November 20051.5 + Array extras + Array & String generics + E4X1.5
  • 3.0
  • 3.1
Ältere Version; nicht mehr unterstützt: 1.7.0Oktober 20061.6 + Pythonic generators + Iterators + let + destructuring assignments2.0
  • 3.2
  • 4.0
1.0
Ältere Version; nicht mehr unterstützt: 1.8.0Juni 20081.7 + Generator expressions + Expression closures3.0
Ältere Version; nicht mehr unterstützt: 1.8.1Juni 20091.8 + geringfügige Updates3.5
Aktuelle Version:1.8.2Januar 20101.8.1 + geringfügige Updates3.6
Aktuelle Version:1.8.5Juli 20101.8.1 + ECMAScript 5 Compliance49.0 (JScript 9.0)

Versionsgeschichte von ECMAScript (ECMA-262)

[Bearbeiten |Quelltext bearbeiten]

Die aktuelle Version ist die Version 2022, die im Juni 2022 als „ECMAScript 2022“ veröffentlicht wurde.[21] Dieser sollen jährliche Updates folgen.[22] Die Entwicklung der Standards erfolgt aufGitHub.[23]

Versionpubliziert amUnterschiede zur VorgängerversionEditor
Ältere Version; nicht mehr unterstützt: 1Juni 1997erste VersionGuy L. Steele, Jr.
Ältere Version; nicht mehr unterstützt: 2Juni 1998Änderungen zwecks Kompatibilität zum internationalen Standard ISO/IEC 16262Mike Cowlishaw
Ältere Version; nicht mehr unterstützt: 3Dez. 1999Neu sindreguläre Ausdrücke, bessere Verarbeitung von Zeichenketten, Kontrollfluss, Fehlerbehandlung mit try/catch, bessere Fehlerbehandlung, bessere Formatierung bei der Ausgabe von Zahlen usw.Mike Cowlishaw
Ältere Version; nicht mehr unterstützt: 4abgebrochenWegen Uneinigkeit in Bezug auf die Zukunft der Sprache wurde die weitere Entwicklung des komplexen Entwurfes zu ECMAScript 4 eingestellt. Einige Ideen werden in ES6 wieder aufleben.
Ältere Version; nicht mehr unterstützt: 5Dez. 2009Im „strict mode“ wird eine erweiterte Fehlerprüfung eingeschaltet. Unklare Sprachkonstrukte von ECMAScript 3 werden entschärft und neue Features wie getter- und setter-Methoden, Unterstützung vonJSON usw. hinzugefügt.[24]Pratap Lakshman,Allen Wirfs-Brock
Ältere Version; noch unterstützt: 5.1Juni 2011Entspricht dem internationalen Standard ISO/IEC 16262:2011, Version 3Pratap Lakshman, Allen Wirfs-Brock
Ältere Version; noch unterstützt: 2015[25][26]Juni 2015Neue Syntax für komplexe Applikationen wie Klassen und Module, die aber mit ähnlicher Terminologie wie in ECMAScript 5 (strict mode) definiert werden können.[27] Neue Sprachbestandteile wiefor/of-Schleifen, teilweise anPython angelehnte Syntax usw. Der Codename lautet “Harmony” und wurde bis kurz vor Verabschiedung als „ECMAScript 6“ bezeichnet,[28] also „ES6“[29].Allen Wirfs-Brock
Ältere Version; noch unterstützt: 2016[30][31]Juni 2016** (Potenzfunktion),Array.prototype.includes, diverse Anpassungen an Generatoren, destruktiven Zuweisungen[32]Brian Terlson
Ältere Version; noch unterstützt: 2017[33]Juni 2017async/await, diverseObject-Funktionen[32][34][35]Brian Terlson
Ältere Version; noch unterstützt: 2018Juni 2018[36]global,import(), Rest/Spread Properties,for-await-of (Asynchronous Iterators),String-Padding, …[37]Brian Terlson
Ältere Version; noch unterstützt: 2019Juni 2019Array#{flat,flatMap},Object.fromEntries,String#{trimStart,trimEnd},Symbol#description, …[38]Brian Terlson, Bradley Farias, Jordan Harband
Ältere Version; noch unterstützt: 2020Juni 2020String.matchAll,BigInt,import(), …[39]Jordan Harband, Kevin Smith
Ältere Version; noch unterstützt: 2021Juni 2021String.prototype.replaceAll,WeakRefs, Logical Assignment Operators, …[40]Jordan Harband, Shu-yu Guo, Michael Ficarra, Kevin Gibbons
Ältere Version; noch unterstützt: 2022[41]Juni 2022Private Methoden und Felder in Klassen, Statische Initialisierungs-Blöcke in Klassen,await außerhalb vonasync-Funktionen, …[42]Shu-yu Guo, Michael Ficarra, Kevin Gibbons
Aktuelle Version:2023Juni 2023Hashbang-Grammar, Symbole für WeakMaps, neue Array-Funktionen

Sicherheit

[Bearbeiten |Quelltext bearbeiten]

Sandbox-Prinzip

[Bearbeiten |Quelltext bearbeiten]

JavaScript wird im Browser in einer sogenanntenSandbox ausgeführt. Dies soll bewirken, dass man in JavaScript nur Zugriff auf die Objekte des Browsers hat und nicht auf dasDateisystem zugreifen kann. Eine Ausnahme stellt der Lesezugriff auf eineDatei dar, die per Dateiauswahl-Dialog, gestartet mit dem HTML-Element<input type="file">, vom Benutzer ausgewählt wurde.

Um Sicherheitsprobleme wie das sogenannteCross-Site-Scripting zu verhindern, wird jedeWebsite oderWebanwendung innerhalb des Browsers isoliert ausgeführt und ein Datenaustausch unterbunden. Ohne diesen Schutz wäre es möglich, über eine SeiteSchadcode auszuführen, der beispielsweise Bank- oder Logindaten in anderen parallel geöffneten Browserfenstern ausliest oder manipuliert.

Auch bestimmte sicherheitsrelevante Browserfunktionen wie das Schließen des Browserfensters, das Aus- und Einblenden vonSymbolleisten, das Ändern der Browserstartseite, der Zugriff auf dieZwischenablage oder das Auslesen der zuletzt besuchten Webseiten des Anwenders werden durch obligatorische Nutzereingaben geschützt.

Standardmäßig wird ein Skript innerhalb eines Browsers in Form eines einzigenThreads ausgeführt. Warteschleifen oder lange Berechnungen sind daher in JavaScript-Programmen zu vermeiden. MitWorker-Objekten ist es möglich, weitere Threads zu erzeugen.[43]

Deaktivieren von JavaScript

[Bearbeiten |Quelltext bearbeiten]

In vielen JavaScript-fähigen Browsern lässt sich JavaScript abschalten oder lassen sich einzelne Aktionen wie die Änderung des Textes in derStatusleiste oder die Manipulation von Browserfenstern deaktivieren. Dies kann bei einigen Browsern mittels Erweiterungen, die JavaScript anhand vonWhite- undBlacklists gezielt auf Seiten ein- und ausschalten, auch automatisiert werden. Daher können sich Entwickler nicht darauf verlassen, dass JavaScript-Programme sich in jeder Umgebung gleich verhalten bzw. überhaupt funktionieren.

Siehe auch:Unobtrusive JavaScript

Sprachelemente

[Bearbeiten |Quelltext bearbeiten]

Datentypen

[Bearbeiten |Quelltext bearbeiten]

JavaScript istdynamisch typisiert. Das bedeutet, dass die Zuweisung von Werten an Variablen keinentypbasierten Einschränkungen unterliegt. Allerdings gibt es diverse Erweiterungen von JavaScript, die einestatische Typisierung optional beziehungsweise zwingend erfordern, zum BeispielTypeScript vonMicrosoft.[44]

Aufgrund der dynamischen Typisierung ist derDatentyp keine Eigenschaft einer Variablen, sondern Laufzeit-bezogen die Eigenschaft ihres aktuellen Wertes (oder auch die Eigenschaft einesLiterals). Der Datentyp eines Wertes lässt sich mit demunären Operatortypeof ermitteln.

Primitive Datentypen

[Bearbeiten |Quelltext bearbeiten]

Zu denprimitiven Datentypen in JavaScript gehören Zahlen, Zeichenketten, boolesche Werte, Symbole, null und undefined.

  • Numerische Werte können entweder den TypNumber (angezeigt durchtypeof als"number") oderBigInt haben (angezeigt durchtypeof als"bigint"). Während der DatentypNumber für Gleitkommazahlen verwendet wird, ermöglicht der DatentypBigInt die Darstellung ganzer Zahlen beliebiger Größe, die den Bereich überschreiten, denNumber abdecken kann.
  • Zeichenketten haben den TypString (angezeigt durchtypeof als"string").
  • Boolesche Werte haben den TypBoolean (angezeigt durchtypeof als"boolean")
  • Symbole haben den TypSymbol (angezeigt durchtypeof als"symbol") und fungieren als eindeutigeIdentifikatoren, werden jedoch seltener verwendet.
  • Der TypNull hat nur den Wertnull (typeof liefert"object", was historisch bedingt ist).
  • Der TypUndefined hat nur den Wertundefined (typeof liefert"undefined").

Nicht primitive Datentypen

[Bearbeiten |Quelltext bearbeiten]

Funktionen sind kein primitiver Typ (typeof liefert"function"). Für alle anderen Werte – reguläre Ausdrücke, Arrays und den Wertnull inbegriffen – lieferttypeof den Zeichenketten-Wert"object" zurück. Es ist zu beachten, dass null ein primitiver Datentyp ist, auch wenntypeof fürnull aus historischen Gründen den Wert "object" liefert. Im Gegensatz zu anderen Programmiersprachen gibt es in JavaScript keine echtenassoziativen Arrays.[45]

Objekte, die durch die vordefiniertenKonstruktorfunktionenString(),Number() undBoolean() erzeugt werden, verhalten sich ähnlich wie Werte der entsprechenden primitiven Datentypen. Allerdings gibt dertypeof-Operator für solche Objekte den Wert"object" zurück. Diese Art von Objekten wird alsWrapper-Objekte bezeichnet. Für den DatentypSymbol existiert keine gleichnamige Konstruktorfunktion. Im Folgenden finden wir ein Beispiel einer Variablen und dem entsprechenden Wrapper-Objekt:

letsimpleString="Beispieltext";// Die Funktion "alert" gibt das Ergebnis "string" in einem Fenster aus.alert(typeofsimpleString);letstringObject=newString("Beispieltext");alert(typeofstringObject);// ergibt "object"

Umgekehrt werden Werte der primitiven TypenNumber,Boolean undString bei Bedarf automatisch in Objekte der entsprechenden Konstruktorfunktion umgewandelt:

letsimpleString="Beispieltext";alert(simpleString.length);// ergibt 12

In diesem Beispiel wird die Eigenschaftlength aufgerufen, obwohlsimpleString ein primitiver String ist. JavaScript wandelt automatisch den primitiven String in ein temporäres String-Objekt um, um die Eigenschaftlength abzurufen.

Kontrollstrukturen

[Bearbeiten |Quelltext bearbeiten]

JavaScript kennt die üblichenKontrollstrukturen. Sollen diese mehr als eineAnweisung enthalten, so muss ein ingeschweifte Klammern eingeschlossenerBlock eingesetzt werden. Anweisungen werden mit einem Semikolon abgeschlossen. Dies ist aber in den meisten Fällen optional; durch dieautomatic semicolon insertion wird es meist automatisch ergänzt.

if-else (Bedingte Anweisung)

[Bearbeiten |Quelltext bearbeiten]
if(bedingung){anweisungen;}else{anweisungen;}

Kurzschreibweise für bedingte Wertzuweisungen:

variable=bedingung?wertWennWahr:wertWennFalsch;

switch-Kontrollstruktur

[Bearbeiten |Quelltext bearbeiten]
switch(variable){casewert1:anweisungen;break;casewert2:anweisungen;break;default:anweisungen;}

while-Schleife

while(bedingung){anweisungen;}

do-while-Schleife

do{anweisungen;}while(bedingung);

for-Schleife

for(startausdruck;bedingung;iterationsausdruck){anweisungen;}

for … in-Schleife

Mit dieser Anweisung werden alle eigenen und ererbten Eigenschaften eines Objektes durchlaufen, die das interne Attribut Enumerable aufweisen.[46] Dieses Attribut wurde in ECMA Script 5 eingeführt und ist für bestimmte eingebaute Eigenschaften (wie z. B. die Funktion toString des Prototyps Object) nicht gesetzt, es kann allerdings im Regelfall vom Benutzer gesetzt (und entfernt) werden.[47] Bei jedem Schleifendurchgang wird einer angegebenen Variable der Eigenschaftsname zugewiesen.

for(leteigenschaftsnameinobjekt){anweisungen;}

for … of-Schleife

Diese Kontrollstruktur funktioniert wie eine for … in-Schleife, mit dem Unterschied, dass hier der angegebenen Variable nicht der Eigenschaftsname, sondern der Eigenschaftswert zugewiesen wird.[48]

for(letwertofobjekt){anweisungen;}

Variablen

[Bearbeiten |Quelltext bearbeiten]

Variablen sollten in JavaScript mitlet odervar deklariert werden und sind dann innerhalb desScopes gültig, in dem sie deklariert wurden, wobeilet den Scope weiter eingrenzt alsvar.[49] Verwendet man Variablen ohne sie vorher explizit zu deklarieren, werden diese implizit als Eigenschaften des globalen Objekts (im Browserwindow) deklariert; dieses Verhalten kann man durch die Anweisung"use strict"; unterbinden. Eine Besonderheit von JavaScript ist dasHoisting von Variablen, das dafür sorgt, dass sämtliche in einem Codeabschnitt deklarierten Variablen und Funktionen bei der Abarbeitung automatisch direkt an den Anfang vorgezogen werden (nur die Deklaration, nicht aber deren Wertzuweisung).

Geltungsbereich von Variablen

[Bearbeiten |Quelltext bearbeiten]

In JavaScript gibt es globale und lokale Variablen abhängig davon, wo sie deklariert werden und wie sie verwendet werden.

  • Globale Variablen:

Variablen, die außerhalb von Funktionen deklariert werden, sind global gültig. Im Browser bedeutetglobal, dass solche Variablen auf der gesamten Webseite und in allen aktiven JavaScript-Dateien zugänglich sind. Dies kann zu unerwünschten Nebeneffekten führen, insbesondere wenn andere Skripte wie Drittanbieter-Plugins,Web Analytics oder Werbebannern eingebunden sind. Daher sollten globale Variablen nach Möglichkeit vermieden werden.

letexplicit;// Explizite Deklaration einer globalen Variableexplicit="explizit deklariert";// Definition einer globalen Variableconsole.log(explicit);// Ausgabe: explizit deklariert

Implizit deklarierte Variablen sind immer global. Auch wenn eine Variable innerhalb einer Funktion implizit ohnelet odervar deklariert wurde, wird sie automatisch zu einer globalen Variable.

functionfoo(){implicit="implizit deklariert";// Definition einer globalen Variable}foo();console.log(implicit);// Ausgabe: implizit deklariert

Eine implizit deklarierte Variable wird automatisch zu einer Eigenschaft desglobalThis-Objekts. Das trifft bei explizit deklarierten globalen Variablen nicht zu.

console.log(globalThis.implicit);// Ausgabe: implizit deklariertconsole.log(typeofglobalThis.explicit);// Ausgabe: undefined
  • Lokaler Geltungsbereich:

Variablen, die innerhalb von Funktionen deklariert oder als Funktionsparameter verwendet werden, haben einen lokalen Geltungsbereich. Das bedeutet, dass sie nur innerhalb der Funktion sichtbar und zugänglich sind.

functionbar(parameter){// Deklaration eines Funktionsparametersletvariable="lokale Variable"// Deklaration einer lokalen Variablenconsole.log(parameter);console.log(variable);// Ausgabe: lokale Variable}bar("lokaler Parameter");console.log(typeofparameter);// Ausgabe: undefinedconsole.log(typeofvariable);// Ausgabe: undefined

Konstanten

[Bearbeiten |Quelltext bearbeiten]

Konstanten sollen mitconst deklariert werden, bei der Initialisierung muss ihnen ein Wert zugewiesen werden. Für den Gültigkeitsbereich gelten dieselben Bedingungen wie bei Variablendeklarationen mitlet. Konstanten können nicht durch erneute Zuweisung verändert werden, allerdings können – wenn es sich bei der Konstanten um Objekte handelt – einzelne Eigenschaften der Konstanten geändert werden.[50]

Funktionen

[Bearbeiten |Quelltext bearbeiten]

In JavaScript sind Funktionen vollwertige Objekte mit eigenen Methoden und Eigenschaften. Sie können erstellt, überschrieben, als Argumente an andere Funktionen übergeben und von diesen erzeugt und zurückgegeben werden.

Im letzteren Fall entsteht eineClosure, auch Funktionsabschluss genannt, die beispielsweiseDatenkapselung ermöglicht:

functioncreateGreeting(name){letmessage="Hallo, "+name+"!";returnfunction(){returnmessage;};}// 'greetAda' ist eine Funktion, die von 'createGreeting' zurückgegeben wirdletgreetAda=createGreeting("Ada Lovelace");console.log(greetAda());// Ausgabe: Hallo, Ada Lovelace!// 'greetAlan' ist eine Funktion, die von 'createGreeting' zurückgegeben wirdletgreetAlan=createGreeting("Alan Turing");console.log(greetAlan());// Ausgabe: Hallo, Alan Turing!// Der Zugriff auf den Wert 'message' ist von außen nicht möglichconsole.log(typeofmessage);// Ausgabe: undefined

Nicht jedes Argument einer Funktion muss beim Aufruf angegeben werden. Fehlende Argumente erhalten den Wertundefined. Seit ECMAScript 2015 können Parameter auch mit Standardwerten definiert werden. Außerdem ermöglicht dasarguments-Objekt den Zugriff auf die Argumente innerhalb der Funktion.

Erzeugung

[Bearbeiten |Quelltext bearbeiten]

Es gibt mehrere Möglichkeiten, in JavaScript Funktionen zu erzeugen:[51]

  • Funktionsdeklarationen („Function Declarations“):
functionf(x,y){returnx+y;}
  • Funktionsausdrücke („Function Expressions“):
letf=function(x,y){returnx+y;};
  • Sofort ausgeführte Funktionsausdrücke („Immediately-Invoked Function Expressions“):

Anonyme Funktionen können auch direkt ausgeführt werden, ohne sie vorher einer Variable zuzuweisen. Das kann zur Kapselung des Gültigkeitsbereichs von Variablen verwendet werden.

(function(x,y){returnx+y;})(2,3);
  • Benannte Funktionsausdrücke („Named Function Expressions“):

Der Variablenf wird eine Funktion mit Bezeichnerg zugewiesen. Außerhalb der Funktion ist sie mitf ansprechbar, innerhalb mitf undg.

letf=functiong(x,y){returnx+y;};
  • Funktionskonstruktor („Function Constructors“):
letf=newFunction('x','y','return x + y;');
  • Pfeilfunktionen („Arrow Functions“):

Die runden Klammern sind optional, falls die Funktion genau ein Argument hat. Werden die geschweiften Klammern weggelassen, muss man genau einen Ausdruck ohnereturn als Rückgabewert angeben. Mit geschweiften Klammern kann man beliebigen Code angeben, muss aber für Rückgabewertereturn verwenden.

(x,y)=>x+y;(x,y)=>{returnx+y;};x=>x+1;x=>{returnx+1;};// Eine so erzeugte Funktion kann man natürlich auch einer Variablen zuweisenletf=(x,y)=>x+y;

Beispiel

[Bearbeiten |Quelltext bearbeiten]

Einefunktionale undrekursive Implementierung desEuklidischen Algorithmus mit zwei Argumenten sieht folgendermaßen aus:

functioneuklid(a,b){if(b===0)returna;returneuklid(b,a%b);}

Implementierung des Euklidischen Algorithmus mit beliebig vielen Argumenten durch Reduzierung vonnumbers auf einen einzigen Wert, indem jeweils zwei Elemente von links nach rechts miteuklid ausgewertet werden:

functionggT(...numbers){letreduce=0;for(elementofnumbers)reduce=euklid(element,reduce);returnreduce;}console.log(ggT());// 0console.log(ggT(4));// 4console.log(ggT(24,36,84));// 12

Implementierung des Euklidischen Algorithmus mit partieller Anwendung:

functionggT(reduce){if(reduce===undefined)return0;returnfunction(element){if(element===undefined)returnreduce;returnggT(euklid(element,reduce));};}console.log(ggT());// 0console.log(ggT(4)());// 4console.log(ggT(24)(36)(84)());// 12

Objekte

[Bearbeiten |Quelltext bearbeiten]

Objekte in JavaScript bestehen aus Eigenschaften, die als Name/Wert-Paar realisiert werden. Dabei wird nicht zwischen Attributen und Methoden des Objektes unterschieden (eine Eigenschaft, deren Wert den TypFunction besitzt, fungiert als Methode). Jedes Objekt – auch durch Literale erzeugte Objekte – erbt vom Prototyp des globalen Objekt-Konstruktors.

Vordefinierte Objekte

[Bearbeiten |Quelltext bearbeiten]

JavaScript kennt mehrere eingebaute Objekte undObjekttypen, die im Standard ECMAScript definiert sind. Dabei wird ein Objekttyp durch eine namensgleicheKonstruktorfunktionen repräsentiert, die zur Erzeugung von Objekten des entsprechenden Typs verwendet werden kann und zugleich einen Verweis auf den Prototyp des Objekttyps beinhaltet.

Weitere Objekte, die beim clientseitigen JavaScript verwendet werden, entstanden historisch vor allem durch dieNetscape-Spezifikationen (window,document usw.). Daswindow-Objekt selbst ist dabei de facto das globale Objekt, indem einfach einer Variablenwindow das globale Objekt zugewiesen wurde. Zahlreiche Unterobjekte vondocument wurden mittlerweile durchDOM HTML standardisiert (title,images,links,forms usw.). Aktuelle Browser unterstützen zudem DOM Core und andereW3C-DOM-Standards sowie Erweiterungen von MicrosoftJScript.

Zugriff auf Objekteigenschaften und -methoden

[Bearbeiten |Quelltext bearbeiten]

Eigenschaften von Objekten (auchMethoden sind Eigenschaften) können wie folgt angesprochen werden:

Punkt-Notation (mit statischenBezeichnern)
objekt.eigenschaft;objekt.methode(parameter1,parameter2);
Klammer-Notation (mit dynamischenBezeichnern)
objekt["eigenschaft"];objekt["methode"](parameter1,parameter2);// Eigenschaftsname, der in Punktnotation illegal wäreobjekt["methode 1"]();// So können auch alle Eigenschaften des Objekts durchlaufen werdenfor(leteigenschaftsNameinobjekt){console.log(eigenschaftsName," = ",objekt[eigenschaftsName]);}

Zu allen Objekten können zurLaufzeit neue Eigenschaften hinzugefügt oder mitdelete bestehende entfernt werden:

// Statisch bzw. dynamisch benannte Eigenschaften hinzufügen:objekt.eigenschaftA="ein Wert";objekt["eigenschaftB"]="ein anderer Wert";// Statisch bzw. dynamisch benannte Eigenschaften entfernen:deleteobjekt.eigenschaftA;deleteobjekt["eigenschaftB"];

Objektliterale

[Bearbeiten |Quelltext bearbeiten]

Objekte können in JavaScript direkt anhand ihrer Eigenschaften definiert werden:

letmeinObjekt={zahl:42,gibZahl:function(){returnthis.zahl;}};alert(meinObjekt.gibZahl());// 42

Eine spezielle Notation gibt es für reguläre Ausdrücke:

// mit Konstruktorfunktion(newRegExp("a")).test("ab");// true// als Literal/a/.test("ab");// true

Konstruktor-Funktionen

[Bearbeiten |Quelltext bearbeiten]

Eine Funktion kann dazu genutzt werden, um ein mitnew erstelltes Objekt zu initialisieren. In diesem Fall spricht man von einemKonstruktor oder einer Konstruktor-Funktion. Innerhalb dieser Funktion kann das neue Objekt über die Variablethis angesprochen werden.

functionMeinObjekt(x){// Konstruktorthis.zahl=x;}letobjekt=newMeinObjekt(3);// Instanz erzeugenalert(objekt.zahl);// per Meldefenster ausgeben (3)

„Private“ Eigenschaften

[Bearbeiten |Quelltext bearbeiten]

Private Eigenschaften und Methoden sind nicht explizit Teil der Sprache.

Mit Hilfe von Closures (sieheFunktionen) lassen sich dennoch private Eigenschaften von Objekten realisieren:

leterschaffeKatze=function(){letlebensZahl=7;letmaunz=function(){return(lebensZahl>0)?"miau":"örks";};// gibt neues Objekt zurückreturn{toeten:function(){lebensZahl-=1;alert(maunz());}};};letotto=erschaffeKatze();otto.toeten();// miau

Lediglich dietoeten-Methode vonotto kennt die VariablelebensZahl.Der Effekt gleicht dem einer privaten Eigenschaft, wenn alle Methoden der Katze in der erzeugenden FunktionerschaffeKatze definiert werden.lebensZahl ist dann für alle Methoden (privilegierte Methoden, im Beispieltoeten) und inneren Funktionen der erzeugenden Funktion (private Methoden, im Beispielmaunz) sichtbar, nicht jedoch von außen oder von nachträglich an das Objekt gehängten Methoden.

Vererbung über Prototypen

[Bearbeiten |Quelltext bearbeiten]

Vererbung kann in JavaScript durch Prototypen realisiert werden.Dies erfordert, dass der prototype-Eigenschaft einer Konstruktor-Funktion ein als Prototyp dienendes Objekt zugewiesen wird.Wenn mit der Konstruktor-Funktion nun ein Objekt erzeugt wird, wird beim Zugriff auf eine nicht-existierende Eigenschaft des neuen Objekts die entsprechende Eigenschaft des Prototyps (wenn vorhanden) zurückgegeben.Beispiel:

letfisch={augen:2};letMutantenfisch=function(){this.augen=3;};Mutantenfisch.prototype=fisch;letblinky=newMutantenfisch();// eigene Eigenschaft von blinkyalert(blinky.augen);// 3// blinkys eigene Eigenschaft wird gelöschtdeleteblinky.augen;// blinky hat die Eigenschaft selbst nicht mehr,// es schimmert die Eigenschaft des Prototyps durchalert(blinky.augen);// 2

Um festzustellen, ob ein Objekt eine Eigenschaft selbst besitzt oder vom Prototyp geerbt hat, hat jedes Objekt (automatisch durch Vererbung von Object) die hasOwnProperty-Methode:

blinky.hasOwnProperty('augen');// false

Fixierung von Objektstruktur und -inhalten

[Bearbeiten |Quelltext bearbeiten]

Die in JavaScript im Regelfall völlig dynamische Struktur eines Objektsobj kann in verschiedener Hinsicht fixiert werden: Nach dem MethodenaufrufObject.preventExtensions(obj) können keine weiteren Attribute und Methoden mehr ergänzt werden.Object.seal(obj) verhindert sowohl die Erweiterung wie die Streichung von Attributen und Methoden. Der AufrufObject.freeze(obj) fixiert sowohl die Objektstruktur wie auch die Attributwerte inklusive der Methoden gegen nachfolgende Veränderungen. Die betreffenden Status eines Objektsobj können mitObject.isExtensible(obj),Object.isSealed(obj) undObject.isFrozen(obj) ermittelt werden.

Es ist auch möglich, nur ein einzelnes Attribut eines Objektsobj zu fixieren. Beispielsweise wird mit dem Aufruf

Object.defineProperty(obj, "vorname", {writable:false});

das Attributobj.vorname schreibgeschützt.[52]

Delegationsprinzipien

[Bearbeiten |Quelltext bearbeiten]

JavaScript ist eineDelegationssprache mit sowohl selbstausführendem als auch direktem Delegationsmechanismus.

Funktionsobjekte als Rollen (Traits und Mixins)
JavaScript unterstützt schon auf der Ebene des Sprachkerns verschiedene auf Funktionsobjekten aufbauende Implementierungen des Rollen-Musters[53] wie z. B.Traits[54][55] undMixins.[56][57] Zusätzliches Verhalten wird bereitgestellt, indem mindestens eine Methode über das Schlüsselwortthis im Rumpf einesfunction-Objekts gebunden wird. Benötigt ein Objekt zusätzliches Verhalten, welches ihm nicht über die Prototypenkette zur Verfügung gestellt werden kann, lässt sich eine Rolle direkt übercall bzw.apply an dieses Objekt delegieren.
Objektkomposition und Vererbung durch Delegation
WährendKomposition in JavaScript über diese direkte Delegation abgedeckt werden kann, kommt automatische Delegation immer dann zur Anwendung, wenn der Interpreter die Prototypenkette eines Objekts nach oben hin abwandern muss, um z. B. eine mit diesem Objekt assoziierte Methode zu finden, die diesem nicht unmittelbar gehört. Sobald die Methode gefunden ist, wird sie im Kontext dieses Objekts aufgerufen. Demzufolge wirdVererbung in JavaScript über einen selbstausführenden Delegationsmechanismus abgebildet, der an dieprototype-Eigenschaft von Konstruktorfunktionen gebunden ist.

Fehlerbehandlung

[Bearbeiten |Quelltext bearbeiten]

Ab Version 3 verfügt ECMAScript über eine von Java übernommeneFehlerbehandlung. Die Anweisungtry … catch … finally fängtAusnahmen (exceptions) ab, die aufgrund einesFehlers oder einerthrow-Anweisung auftreten. Die Syntax lautet:

try{// Anweisungen, in denen Ausnahmen auftreten oder ausgelöst werden können}catch(exception){// Anweisungsfolge, die im Ausnahmefall ausgeführt wird.// In diesem Teil kann die Fehlerbehandlung erfolgen.}finally{// Anweisungsfolge, die anschließend in jedem Fall ausgeführt wird.}throw"sample exception";// wenn verfügbar, besser: Error-Objekt (siehe unten)

Zu Beginn werden die Anweisungen imtry-Block ausgeführt. Falls eine Ausnahme auftritt, wird derKontrollfluss sofort zumcatch-Block mit dem Ausnahmeobjekt als Parameter umgeleitet.

Im Normalfall wird der Ausnahmeblock übersprungen. Nach der Ausführung destry-Blocks (auch teilweise) und gegebenenfalls descatch-Blocks werden in jedem Fall die Anweisungen imfinally-Block ausgeführt. Derfinally-Teil kann weggelassen werden, alternativ dercatch-Teil.

Einige Laufzeitumgebungen wieV8 (und somitNode.js) und auch viele Webbrowser stellen gesonderteError-Objekte zur Verfügung, die neben der Fehlermeldung auch einenStacktrace und weitere Zusatzinformationen transportieren können.[58][59][60]Um diese Vorteile zu nutzen, ändert man im einfachsten Anwendungsfall denthrow-Befehl vonthrow"Meldungstext"; zuthrownewError("Meldungstext");.[61]

Klammern um den Parameter desthrow-Befehls sind im Allgemeinen nicht notwendig.[52] Sollten sie in Ausnahmefällen benötigt werden, um beispielsweise einen auf mehrere Zeilen verteilten Parameter zusammenzufassen, kann die mögliche Verwechslung mit einem Funktionsaufruf dennoch vermieden werden, indem man ein Leerzeichen zwischenthrow und die öffnende Klammer einfügt.

JavaScript-Bibliotheken

[Bearbeiten |Quelltext bearbeiten]

Um die Erstellung vonWebanwendungen mit Hilfe von JavaScript zu erleichtern, gibt es diverseBibliotheken undFrameworks. Eine Bibliothek ist eine Sammlung vonFunktionen, die der Programmierer nutzen kann. Ein Framework fordert darüber hinaus durch ein besonderes Maß anAbstraktion eine bestimmte Struktur der Programmierung.

Ausgelöst von neuen Konzepten wieAjax entstand seit 2004 ein neues Interesse für JavaScript. JavaScript wird zunehmend fürRich-Client-Anwendungen benutzt, die das Aussehen und die Bedienung von herkömmlichenDesktop-Programmen auf Web-gestützte Anwendungen übertragen. JavaScript spielt dabei eine Schlüsselrolle, wenn es darum geht, Statusinformationen ohne Laden einer vollständigen Seite zwischen Browser und HTTP-Server zu übertragen. Im Zuge dieser neuen Anforderungen entstanden verschiedene Bibliotheken, die die Entwicklung solcher Anwendungen vereinfachen wollen. Neben Ajax-Funktionalitäten bieten die meisten dieser Bibliotheken eine eigene Basis für objektorientierte Programmierung, eine Abstraktionsschicht für das komfortable Arbeiten mit demDOM sowie grafische Effekte wieAnimationen. Aber auch schon vor dem breiten Einsatz von Ajax existierten Funktionssammlungen zur Unterstützung der browserübergreifenden Programmierung.[62]

Zu den bekannten JavaScript-Bibliotheken und Frameworks zählenAngularJS,Dojo Toolkit,Ext JS,jQuery,MooTools,Prototype,Qooxdoo,React,Vue.js und dieYahoo User Interface Library. Speziell mit grafischen Effekten beschäftigen sich Moo.fx undScript.aculo.us. Für die serverseitige Programmierung mittelsNode.js stehen eigene Bibliotheken und Frameworks bereit.

Einige Bibliotheken und insbesondere Frameworks erweitern die Sprache um zusätzliche Funktionen, die häufig in spätere Versionen der Spezifikation einfließen oder rüsten bei Bedarf ältere Implementierung perPolyfill nach.

Siehe auch:Kategorie:JavaScript-Bibliothek

JavaScript & Suchmaschinenoptimierung (SEO)

[Bearbeiten |Quelltext bearbeiten]

Suchmaschinen gehen unterschiedlich mit der Verarbeitung von Javascript-Inhalten um, wodurch es in den letzten Jahren immer wieder zu Fällen gekommen ist, dass Websites teilweise oder gänzlich nicht in Suchmaschinen auffindbar waren. Der SuchmaschinenbetreiberGoogle kann laut eigenen Aussagen JavaScript-Inhalte crawlen, rendern und indexieren.[63] Neben allgemeinen Empfehlungen wie z. B. die Verwendung von aussagekräftigen Titeln, eindeutigen Statuscodes und den sorgsamen Umgang mit Noindex-Direktiven gibt es im Hinblick auf JavaScript noch spezifischere Empfehlungen, welche helfen können, dass JavaScript-Webanwendungen optimal viaSuchmaschinenoptimierung aufgefunden werden können. Dazu zählen serverseitiges Pre-Rendering oder der Verzicht von Fragmenten bei Links. Für das Debugging von JavaScript & SEO gibt es eine Reihe von offiziellen Empfehlungen seitens Google, um nachprüfen zu können, wie derGooglebot Webinhalte erfasst.[64]

Siehe auch

[Bearbeiten |Quelltext bearbeiten]

Literatur

[Bearbeiten |Quelltext bearbeiten]

Weblinks

[Bearbeiten |Quelltext bearbeiten]
Commons: JavaScript – Sammlung von Bildern, Videos und Audiodateien
Wikibooks: Websiteentwicklung: JavaScript – Lern- und Lehrmaterialien
Wiktionary: JavaScript – Bedeutungserklärungen, Wortherkunft, Synonyme, Übersetzungen

Spezifikationen

[Bearbeiten |Quelltext bearbeiten]

Dokumentationen

[Bearbeiten |Quelltext bearbeiten]

Einzelnachweise

[Bearbeiten |Quelltext bearbeiten]
  1. ECMAScript® 2023 Language Specification. In:www.ecma-international.org. Ecma International, Juni 2023, abgerufen am 27. Juli 2023 (englisch). 
  2. Stefan Koch:JavaScript. Einführung, Programmierung und Referenz – inklusive Ajax. 5. Auflage. dpunkt.verlag, Heidelberg 2009,ISBN 978-3-89864-594-2, Überblick,S. 5–17 (457 S.). 
  3. abOlaf Göllner:JavaScript für Mikrocontroller. In:heise online. Verlag Heinz Heise, 13. August 2013, abgerufen am 27. Juli 2016. 
  4. abOlaf Göllner:Tessel: JavaScript-Entwicklerboard fürs „Internet der Dinge“. In:heise online. Verlag Heinz Heise, 15. August 2013, abgerufen am 27. Juli 2016. 
  5. Stefan Koch:JavaScript. Einführung, Programmierung und Referenz – inklusive Ajax. 5. Auflage. dpunkt.verlag, Heidelberg 2009,ISBN 978-3-89864-594-2, JavaScript im Browser,S. 137–156 (457 S.). 
  6. Jens Ihlenfeld:Node – strikt ereignisorientierter Javascript-Server. In:Golem.de. 24. November 2009, abgerufen am 27. Juli 2016. 
  7. Steve Champeon:#"https://redirecter.toolforge.org/?url=http%3A%2F%2Farchive.oreilly.com%2Fpub%2Fa%2Fjavascript%2F2001%2F04%2F06%2Fjs_history.html">Original (nicht mehr online verfügbar) am19. Juli 2016; abgerufen am 27. Juli 2016 (englisch). 
  8. Chris Mills:A Short History of JavaScript. In:Web Education Community Group Wiki. W3C, 27. Juli 2012, abgerufen am 27. Juli 2016 (englisch). 
  9. Auskunft zur Marke JAVASCRIPT im Register desDeutschen Patent- und Markenamtes (DPMA)
  10. Ingo Pakalski:15 Jahre WWW: Die Browserkriege. Der erste Browserkrieg zwingt Netscape in die Knie. In:Golem.de. 1. Mai 2008, abgerufen am 27. Juli 2016. 
  11. Klaus-Peter Kerbusk:Mißbrauch des Monopols. In:Der Spiegel.Nr. 44, 1997 (online). 
  12. Scripting for the Java Platform. In:Java SE Documentation.Oracle, abgerufen am 24. Oktober 2012 (englisch). 
  13. Florian Scholz, Eric Shepherd:New in JavaScript 1.3. In:Mozilla Developer Network. Mozilla Foundation, 20. Januar 2016, archiviert vomOriginal am28. Juli 2016; abgerufen am 27. Juli 2016 (englisch). 
  14. Florian Scholz, Eric Shepherd:New in JavaScript 1.4. In:Mozilla Developer Network. Mozilla Foundation, 20. Januar 2016, abgerufen am 27. Juli 2016 (englisch). 
  15. New Features in this Release. In:DevEdge Online Documentation. Netscape Communications Corporation, 29. Oktober 1998, archiviert vomOriginal (nicht mehr online verfügbar) am2. August 2004; abgerufen am 27. Juli 2016 (englisch). 
  16. Florian Scholz, Eric Shepherd:New in JavaScript 1.5. In:Mozilla Developer Network. Mozilla Foundation, abgerufen am 20. Januar 2016 (englisch). 
  17. Wladimir Palant, SylvainPasche, Nickolay Ponomarev, Florian Scholz, Eric Shepherd:New in JavaScript 1.6. In:Mozilla Developer Network. Mozilla Foundation, 4. April 2016, abgerufen am 27. Juli 2016 (englisch). 
  18. Florian Scholz, James Herdman, Eric Shepherd, Robert Sedovšek, David Bruant, Leo Balter, Jonathan Watt, Eli Grey, Nickolay Ponomarev, Martin Honnen, Evan Prodromou:New in JavaScript 1.7. In:Mozilla Developer Network. Mozilla Foundation, 21. Oktober 2015, abgerufen am 27. Juli 2016 (englisch). 
  19. Florian Scholz, Eli Grey, Leandro Mercês Xavier, Nickolay Ponomarev:New in JavaScript 1.8. In:Mozilla Developer Network. Mozilla Foundation, 20. Januar 2016, abgerufen am 27. Juli 2016 (englisch). 
  20. John Resig:Versions of JavaScript. In:johnresig.com/. 22. April 2008, abgerufen am 8. Juni 2020 (englisch). 
  21. ECMAScript 2022 Language Specification. Juni 2022, abgerufen am 22. Juli 2022 (englisch). 
  22. Julia Schmidt:Standard für ECMAScript soll jährlich Updates erhalten. In:heise Developer. 23. Januar 2015, abgerufen am 22. Oktober 2015. 
  23. tc39/ecma262. In:GitHub. Abgerufen am 2. Januar 2017. 
  24. Changes to JavaScript, Part 1: EcmaScript 5
  25. ECMAScript 2015 Language Specification. Abgerufen am 2. Januar 2017 (englisch). 
  26. ECMAScript 2016 Language Specification. 7. Auflage. Emca International, Genf (englisch, 586 S.,ecma-international.org [PDF]). ECMAScript 2016 Language Specification (Memento vom 12. April 2015 imInternet Archive)
  27. ECMAScript 6 compatibility table. In:kangax.github.io. Abgerufen am 2. Januar 2017 (englisch). 
  28. Nicholas C. Zakas:Professional JavaScript for Web Developers. John Wiley & Sons., 2011,ISBN 978-1-118-02669-4 (englisch, 960 S.). 
  29. siehe englische WP
  30. ECMAScript 2017 Language Specification. Juni 2017, abgerufen am 5. Dezember 2017 (englisch). 
  31. JavaScript-Standard ECMAScript 2016 offiziell verabschiedet. In:heise online. heise Developer, 17. Juni 2016, abgerufen am 3. Januar 2017. 
  32. abECMAScript Next compatibility table. In:kangax.github.io. Abgerufen am 2. Januar 2017. 
  33. ECMAScript 2017 Language Specification. Ecma International, Juni 2017, abgerufen am 4. August 2017 (englisch). 
  34. Christian Liebel:Evolution im Web: ECMAScript 2017. heise Developer, 1. August 2017, abgerufen am 4. August 2017. 
  35. ECMAScript 2017. In:Exploring ES2016 and ES2017. 22. März 2017, abgerufen am 4. August 2017 (englisch). 
  36. JavaScript-Standard ECMAScript 2018 offiziell verabschiedet heise.de, am 28. Juni 2018
  37. Tracking ECMAScript Proposals. In:TC39. Ecma, abgerufen am 4. August 2017 (englisch). 
  38. ECMAScript 2019: Neun Neuerungen für den JavaScript-Sprachstandard. In:heise online. heise online, 4. Februar 2019, abgerufen am 17. April 2020. 
  39. #"ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AJavaScript&rft.title=JavaScript%3A+Die+Features+f%C3%BCr+ECMAScript+2020+stehen+fest&rft.description=JavaScript%3A+Die+Features+f%C3%BCr+ECMAScript+2020+stehen+fest&rft.identifier=https%3A%2F%2Fwww.heise.de%2Fdeveloper%2Fmeldung%2FJavaScript-Die-Features-fuer-ECMAScript-2020-stehen-fest-4697505.html&rft.publisher=heise+online&rft.date=2020-04-06"> 
  40. JavaScript 2021: Schwache Referenzen, beliebige Versprechen und neue Zuweisungen. In:heise online. heise online, 24. Juli 2020, abgerufen am 27. September 2021. 
  41. ECMAScript® 2022 Language Specification
  42. Proposals included in the incoming ECMAScript 2022 standard for JavaScript. In:geek culture. geek culture, 2. September 2021, abgerufen am 27. September 2021. 
  43. W3C Working Draft 24 September 2015. In:w3.org. Abgerufen am 28. Juli 2016. 
  44. Ilja Zaglov:TypeScript: Microsoft’s neue JavaScript Erweiterung. In:t3n Magazin. 10. Oktober 2012, abgerufen am 10. Oktober 2012. 
  45. JavaScript/Objekte/Array. In:SELFHTML. 15. Juli 2016, abgerufen am 27. Juli 2016. 
  46. for…in MDN
  47. Object.defineProperty() MDN
  48. for…of MDN
  49. JavaScript/Variable/let im SELFHTML-Wiki
  50. JavaScript/Variable/const im SELFHTML-Wiki
  51. Juriy Kangax Zaytsev:Named function expressions demystified. In:kangax.github.io. 17. Juni 2009, abgerufen am 28. Juli 2016 (englisch). 
  52. abECMAScript Language Specification – ECMA-262 Edition 5.1. In:ecma-international.org. Abgerufen am 28. Juli 2016.  (ecma-international.org (PDF) PDF).
  53. Englische Wikipedia:Role-oriented programming
  54. Traits for Javascript, 2010.
  55. CocktailJS – Annotations. Traits. Talents. April 2013.
  56. Angus Croll,A fresh look at JavaScript Mixins vom 31. Mai 2011.
  57. Die vielen Talente von JavaScript Rollen-orientierte Programmieransätze wie Traits und Mixins verallgemeinern zu können. peterseliger.blogspot.de; 5. Juni 2014.
  58. JavaScript Stack Trace API inGoogle V8 Wiki, Stand 28. Juni 2010, abgerufen am 23. Februar 2013
  59. JavaScript Core Reference: Error (Memento vom 4. November 2014 imInternet Archive) inAptana HTML Reference, Stand 2. Juli 2012, abgerufen am 23. Februar 2013
  60. Tom DuPont:Report Unhandled Errors from JavaScript. 13. April 2013, abgerufen am 16. April 2013 (englisch, Fehlerprotokollierung mit Stacktrace in JavaScript). 
  61. Nico Reed:What is the error object? (Memento vom 31. März 2013 imInternet Archive) In:Nodejitsu Documentation, Stand 26. August 2011, abgerufen am 23. Februar 2013.
  62. Stefan Koch:JavaScript. Einführung, Programmierung und Referenz – inklusive Ajax. 5. Auflage. dpunkt.verlag, Heidelberg 2009,ISBN 978-3-89864-594-2, Ajax,S. 333–355 (457 S.). 
  63. Grundlagen von JavaScript-SEO | Google Search Central. Abgerufen am 7. Dezember 2020. 
  64. Web developer tools for debugging JavaScript issues in Google Search. Abgerufen am 7. Dezember 2020 (englisch). 
Normdaten (Sachbegriff):GND:4420180-1 (GND Explorer,lobid,OGND,AKS)
Abgerufen von „https://de.wikipedia.org/w/index.php?title=JavaScript&oldid=255921438
Kategorien:

[8]ページ先頭

©2009-2025 Movatter.jp