JavaScript
JavaScript | |
---|---|
// Voorbeeld JavaScript
functie halloWereld () {
waarschuwing ( 'Hallo wereld' );
}
venster . onload = halloWereld ;
| |
Basis data | |
paradigma's : | multiparadigmatisch |
Jaar van uitgave: | mei 1996[1] |
Ontwerper: | Brendan Eicho |
Ontwikkelaar: | Brendan Eicho |
Huidige versie : | ECMAScript 2020 [2] (juni 2020) |
Typen : | zwak , dynamisch , eend |
Belangrijke implementaties : | SpiderMonkey , Neushoorn , JavaScriptCore , V8 |
Beïnvloed door: | Zelf , C , Schema , Perl , Python , Java , Lua |
Aangedaan: | ActionScript , Haxe , CoffeeScript , Dart , TypeScript |
Licentie : | BSD |
JavaScript (kortweg JS ) is een scripttaal die oorspronkelijk door Netscape in 1995 is ontwikkeld voor dynamische HTML in webbrowsers om gebruikersinteracties te evalueren, inhoud te wijzigen, opnieuw te laden of te genereren en zo de mogelijkheden van HTML en CSS uit te breiden. [3] Tegenwoordig wordt JavaScript ook buiten browsers gebruikt, bijvoorbeeld op servers en in microcontrollers. [4] [5]
De huidige naam van de taal die oorspronkelijk LiveScript heette, is in 1996 ontstaan uit een samenwerking tussen Netscape en Sun Microsystems . Hun Java-applets , gemaakt met de programmeertaal Java , eveneens gepubliceerd in 1995, werden met behulp van LiveScript in Netscape Navigator geïntegreerd. Om te profiteren van de populariteit van Java, werd LiveScript omgedoopt tot JavaScript, hoewel de twee talen onafhankelijk van elkaar zijn ontwikkeld en totaal verschillende basisconcepten hebben.
De taalkern van JavaScript, gestandaardiseerd als ECMAScript ( ECMA 262), beschrijft een dynamisch getypte , objectgeoriënteerde , maar klasseloze scripttaal. Het doet recht aan alle objectgeoriënteerde programmeerparadigma's, onder meer op basis van prototypes , waarvan de declaratie mogelijk wordt gemaakt vanuit ECMAScript 6 met een syntaxis vergelijkbaar met die in class-based programmeertalen. JavaScript kan naar behoefte objectgeoriënteerd , procedureel of functioneel worden geprogrammeerd. [6]
ontwikkeling
JavaScript- syntaxis is vergelijkbaar met C- afstammelingen. Ondanks de naam en syntactische gelijkenis heeft JavaScript weinig gemeen met Java . In JavaScript wordt overerving bijvoorbeeld niet ondersteund door klassen , maar door prototypes .
In het verleden werd JavaScript vooral aan de clientzijde gebruikt. JavaScript of de ECMAScript-implementaties, bijvoorbeeld met het framework Node.js [7] en als JScript of JScript .NET in een ASP- of ASP.NET- omgeving op Microsoft Internet Information Services maken ook server-side applicaties mogelijk. Andere voorbeelden van JavaScript-programmering aan de serverzijde zijn POW en Jaxer, die zijn gebaseerd op de Mozilla JavaScript-engine SpiderMonkey , V8CGI, die is gebaseerd op de JavaScript-implementatie V8 en is geïntegreerd in de Apache HTTP-server , en QML , een uitgebreide vorm van JavaScript voor tekenoppervlakken en animaties.
De taal wordt ook gebruikt als scripttaal voor games en applicatieprogramma 's, aangezien de taalkern slechts enkele objecten bevat en de interpreter die nodig is om scripts die in JavaScript zijn geformuleerd uit te voeren, daarom relatief klein kan worden gehouden.
Bovendien wordt JavaScript gebruikt als de lingua franca in de MongoDB- database en in microcontrollers. [4] [5]
gebruik maken van
Typische toepassingsgebieden
Typische toepassingsgebieden van JavaScript in de webbrowser zijn:
- dynamische manipulatie van websites met behulp van het Document Object Model
- Plausibiliteitscontrole ( gegevensvalidatie ) van formulierinvoer vóór verzending naar de server
- Weergave van dialoogvensters
- Gegevens verzenden en ontvangen zonder dat de browser de pagina opnieuw hoeft te laden ( Ajax )
- Zoektermen voorstellen terwijl u typt
- Reclamebanners of ticker
- Verduistering van e-mailadres om spam tegen te gaan
- Wijzig meerdere frames tegelijk of verwijder de pagina uit de frameset
- Lees- en schrijftoegang tot cookies en de webopslag in de browser
misbruik
Sommige toepassingen die mogelijk zijn met JavaScript werken deels tegen de wensen van de gebruiker in of zijn in tegenspraak met het principe van de minste verrassing . Sommige browsers bieden daarom functies aan die dergelijke JavaScript-functies onderdrukken.
Voorbeelden:
- Verhulling van internetadressen waarnaar een link verwijst
- Het contextmenu deactiveren om het moeilijker te maken om afbeeldingen of de hele pagina op te slaan
- De kopieerfunctie uitschakelen om het kopiëren van tekst of afbeeldingen moeilijker te maken
- Ongevraagde (reclame) pop-ups of pop-unders of opeenvolgende dialoogvensters die de gebruiker hinderen
- Onbedoeld sluiten van het browservenster
- Onbedoeld formaat wijzigen van het browservenster
- Barrièrevrije websites worden gekenmerkt door het feit dat ze zoveel mogelijk onbeperkt kunnen worden gebruikt, zelfs als JavaScript is uitgeschakeld. Het gedeactiveerde JavaScript beperkt de bruikbaarheid van een website gedeeltelijk.
- Maatregelen waarmee een gebruiker kan worden herkend wanneer deze een website op een later tijdstip bezoekt, waarbij de beveiligingsinstellingen van de browser worden omzeild (zie anonimiteit op internet )
- Bij kwetsbare webapplicaties kan JavaScript ook misbruikt worden door derden, bijvoorbeeld via XSS (code-injectie).
verhaal
Op 18 september 1995 bracht Netscape de vorige versie van Navigator 2.0 uit, een browser met een ingebouwde scripttaal, die toen LiveScript heette en was ontwikkeld door Brendan Eich . De taal kan onder andere de formulierinvoer van de gebruiker controleren voordat deze wordt verzonden. Op 4 december 1995 kondigden Netscape en Sun Microsystems een samenwerking aan gericht op de directe interactie van LiveScript met Java-applets. Sun ontwikkelde de benodigde Java-klassen, Netscape de LiveConnect- interface en hernoemde de taal naar JavaScript (JavaScript 1.0). [8] [9] JavaScript is sinds de overname van Sun Microsystems een handelsmerk van Oracle . [10]
Met de eerste bètaversie van Navigator 3.0 introduceerde Netscape JavaScript 1.1 op 29 april 1996. In dezelfde versie waren er de innovaties om toegang te krijgen tot afbeeldingen en zogenaamde rollover-graphics te maken . LiveConnect was nu een integraal onderdeel van de browser. Met de bètaversie van Internet Explorer 3 presenteerde Microsoft in mei 1996 zijn eerste JScript-compatibele browser. Dit was het begin van de browseroorlog . [11] [12]
Met de aankondiging van de Netscape Communicator werd JavaScript 1.2 uitgebracht op 15 oktober 1996; Netscape Communicator 4.0 met JavaScript 1.2 verscheen echter pas op 4 juni 1997. Eveneens in juni 1997 publiceerde de European Computer Manufacturers Association haar standaard ECMA-262 (ECMAScript) , die samen met Netscape was ontwikkeld en bedoeld was om de elementen van een scripttaal. Dit werd de ISO-norm ISO / IEC 16262: 1998 Informatietechnologie - ECMAScript-taalspecificatie in april 1998. Op 1 oktober 1997 kwam Internet Explorer 4 uit, die het taalbereik van JavaScript 1.1 bestreek. Daarnaast werden eigen extensies gepubliceerd die leidden tot verschillen in compatibiliteit tussen Navigator en Internet Explorer en die een DOM-achtige syntax verschaften die het mogelijk maakte om toegang te krijgen tot alle elementen van de website en deze naar wens aan te passen.
De JavaScript-interpreter Rhino , geïmplementeerd in Java, werd vanaf versie 6.0 geleverd als onderdeel van de Java-runtime-omgeving als onderdeel van de Java-runtime-omgeving . [13] In juli 1998 werd met de bètaversie van Netscape Communicator 4.5 JavaScript 1.3, die al beschikbaar was in versie 4.06 van Netscape Communicator, gepubliceerd. [14] In oktober 1998 introduceerde Netscape JavaScript 1.4. Deze versie was volledig compatibel met ECMA-262. Een browser met ondersteuning voor deze versie verscheen echter niet. [15] [16] In april 2000 werd de Preview Release 1 van Navigator 6 geleverd met JavaScript 1.5 en DOM Level 1. Op 5 juni 2002 werd Mozilla 1.0 uitgebracht met JavaScript 1.5 (JavaScript-versie 1.5 komt overeen met ECMA-262 versie 3 ), [17] op 29 november 2005 Mozilla Firefox 1.5 met JavaScript 1.6 [18] , op 12 juli 2006 Mozilla Firefox 2.0b1 met JavaScript 1.7 [19] en op 18 december 2007 Mozilla Firefox 3.0b2 met JavaScript 1.8. [20]
Versiegeschiedenis van JavaScript
versie | publicatie | Correspondentie | Netscape-navigator | Mozilla Firefox | Internet Explorer | Opera | safari | Google Chrome |
---|---|---|---|---|---|---|---|---|
1.0.0 | maart 1996 | 2.0 | 3.0 | |||||
1.1.0 | augustus 1996 | 3.0 | ||||||
1.2.0 | juni 1997 | 4.0-4.05 | ||||||
1.3.0 | oktober 1998 | ECMA-262 1e editie / ECMA-262 2e editie | 4,06-4,7x | 4.0 | ||||
1.4.0 | Netscape-server | |||||||
1.5.0 | november 2000 | ECMA-262 3e editie | 6.0 | 1.0 |
|
| ||
1.6.0 | november 2005 | 1.5 + Array-extra's + Array & String-generieken + E4X | 1.5 |
| ||||
1.7.0 | oktober 2006 | 1.6 + Pythonic generators + Iterators + let + destructurering opdrachten | 2.0 |
| 1.0 | |||
1.8.0 | juni 2008 | 1.7 + Generator-uitdrukkingen + Expressie-afsluitingen | 3.0 | |||||
1.8.1 | juni 2009 | 1.8 + kleine updates | 3.5 | |||||
1.8.2 | januari 2010 | 1.8.1 + kleine updates | 3.6 | |||||
1.8.5 | juli 2010 | 1.8.1 + ECMAScript 5-compliance | 4e | 9.0 (JScript 9.0) |
Versiegeschiedenis van ECMAScript (ECMA-262)
De huidige versie is de 2020-versie, die in juni 2020 werd gepubliceerd als "ECMAScript 2020". [22] Dit wordt gevolgd door jaarlijkse updates. [23] De standaarden zijn ontwikkeld op GitHub. [24]
versie | gepubliceerd op | Verschillen met de vorige versie | editor |
---|---|---|---|
1 | juni 1997 | eerste versie | Guy L. Steele, Jr. |
2 | juni 1998 | Wijzigingen voor compatibiliteit met de internationale norm ISO / IEC 16262 | Mike Cowlishaw |
3 | december 1999 | Reguliere expressies , betere verwerking van tekenreeksen, controlestroom, foutafhandeling met try/catch, betere foutafhandeling, betere opmaak bij het uitvoeren van getallen, enz. zijn nieuw. | Mike Cowlishaw |
4 | geannuleerd | Door onenigheid over de toekomst van de taal werd de verdere ontwikkeling van het complexe concept voor ECMAScript 4 stopgezet. Sommige ideeën komen weer tot leven in ES6. | |
5 | december 2009 | In "strikte modus" is een uitgebreide foutcontrole ingeschakeld. Onduidelijke taalconstructies van ECMAScript 3 worden onschadelijk gemaakt en nieuwe functies zoals getter- en setter-methoden, ondersteuning voor JSON , enz. worden toegevoegd. [25] | Pratap Lakshman , Allen Wirfs-Brock |
5.1 | juni 2011 | Voldoet aan de internationale norm ISO / IEC 16262: 2011, versie 3 | Pratap Lakshman, Allen Wirfs-Brock |
[26] [27] | 2015juni 2015 | Nieuwe syntaxis voor complexe toepassingen zoals klassen en modules, die echter kan worden gedefinieerd met terminologie die vergelijkbaar is met die in ECMAScript 5 (strikte modus). [28] Nieuwe taalcomponenten zoals for / of loops, syntax deels gebaseerd op Python , etc. De codenaam is “Harmony” en werd tot kort voordat deze werd aangenomen, “ECMAscript 6” genoemd. [29] | Allen Wirfs-Brock |
[30] [31] | 2016juni 2016 | ** ( power functie ), Array.prototype.includes , diverse aanpassingen aan generatoren, destructieve opdrachten [32] | Brian Terlson |
[33] | 2017juni 2017 | async / await , verschillende Object [32] [34] [35] | Brian Terlson |
2018 | juni 2018 [36] | global , import() , rest / spread eigenschappen, for - await - of (asynchrone iterators), string padding , ... [37] | Brian Terlson |
2019 | juni 2019 | Array#{flat,flatMap} , Object.fromEntries , String#{trimStart,trimEnd} , Symbol#description ,… [38] | Brian Terlson, Bradley Farias, Jordan Harband |
2020 | juni 2020 | String.matchAll , BigInt , import() ,… [39] | Jordan Harband, Kevin Smith |
veiligheid
Sandbox-principe
JavaScript wordt in de browser uitgevoerd in een zogenaamde sandbox . Het effect hiervan is dat je in JavaScript alleen toegang hebt tot de objecten van de browser en geen toegang hebt tot het bestandssysteem . Een uitzondering is leestoegang tot een bestand dat door de gebruiker is geselecteerd via het dialoogvenster voor bestandsselectie, gestart met het HTML-element <input type="file">
.
Om beveiligingsproblemen zoals cross-site scripting te voorkomen , wordt elke website of webapplicatie geïsoleerd binnen de browser uitgevoerd en wordt gegevensuitwisseling voorkomen. Zonder deze bescherming zou het mogelijk zijn om aan de ene kant kwaadaardige code uit te voeren die bijvoorbeeld bank- of inloggegevens leest of manipuleert in andere browservensters die tegelijkertijd geopend zijn.
Bepaalde veiligheidsrelevante browserfuncties, zoals het sluiten van het browservenster, het verbergen en weergeven van werkbalken , het wijzigen van de startpagina van de browser, toegang tot het klembord of het uitlezen van de laatst bezochte webpagina's van de gebruiker, worden ook beschermd door verplichte invoer van de gebruiker.
Een script wordt standaard uitgevoerd als een enkele thread in een browser. Wachtloops of lange berekeningen moeten daarom worden vermeden in JavaScript-programma's. Met Worker
objecten is het mogelijk om extra threads te maken. [40]
JavaScript uitschakelen
In veel JavaScript-compatibele browsers kan JavaScript worden uitgeschakeld of afzonderlijke acties, zoals het wijzigen van de tekst in de statusbalk of het manipuleren van browservensters, worden gedeactiveerd. In sommige browsers kan dit ook worden geautomatiseerd door middel van extensies die JavaScript specifiek voor pagina's met witte en zwarte lijsten activeren en deactiveren . Als gevolg hiervan kunnen ontwikkelaars er niet op vertrouwen dat JavaScript-programma's zich in elke omgeving op dezelfde manier gedragen of helemaal niet werken.
Taalelementen
Gegevenstypen
JavaScript wordt dynamisch getypt . Dit betekent dat de toewijzing van waarden aan variabelen niet onderhevig is aan typegebonden beperkingen. Er zijn echter verschillende extensies voor JavaScript die statisch typen als optie of verplicht vereisen, bijvoorbeeld TypeScript van Microsoft . [41]
Vanwege de dynamische typering is het gegevenstype geen eigenschap van een variabele, maar eerder de eigenschap van de huidige waarde (of de eigenschap van een letterlijke ) in relatie tot de runtime. Het datatype van een waarde kan worden bepaald met de unaire operator typeof
.
Primitieve gegevenstypen
Primitieve gegevenstypen omvatten waarden voor getallen, tekenreeksen, Booleaanse waarden en symbolen. Strings zijn van het type String ( typeof
retourneert "string"
), numerieke waarden van het type Number ( typeof
retourneert "number"
), Booleaanse waarden (het Boolean typeof
retourneert "boolean"
). Een ander, zij het zelden gebruikt, primitief gegevenstype is symbol , dat als identificatie fungeert (zie ook trefwoord symbol ) ( typeof
geeft "symbol"
).
Een speciaal geval is het type Undefined met undefined
als de enige waarde ( typeof
geeft "undefined"
).
Geen primitieve gegevenstypen
Functies zijn geen primitief type; typeof
retourneert "function"
. Voor alle andere waarden - inclusief reguliere expressies, arrays en de waarde null
- retourneert typeof
de tekenreekswaarde "object"
. In tegenstelling tot andere programmeertalen zijn er geen echte associatieve arrays in JavaScript. [42]
Objecten die zijn gemaakt met de vooraf gedefinieerde constructorfuncties String()
, Number()
en Boolean()
gedragen zich als waarden van de overeenkomstige gegevenstypen - de operator typeof
retourneert echter "object"
. Dergelijke objecten staan bekend als wrapper-objecten . Er is geen constructorfunctie met dezelfde naam voor het symboolgegevenstype . Het volgende is een voorbeeld van een variabele en het bijbehorende wrapper-object:
let variabele = "voorbeeldtekst" ;
// De "alert"-functie geeft het resultaat "string" weer in een venster.
alert (typeof variabel);
variabele = nieuwe String ( "voorbeeldtekst" );
alert (typeof variabel); // resulteert in "object"
Omgekeerd worden waarden van de primitieve typen Number , Boolean en String indien nodig automatisch omgezet in objecten van de bijbehorende constructorfunctie:
let variabele = "voorbeeldtekst" ;
alert ( variabele . lengte ); // resultaten in 12
Controle structuren
JavaScript kent de gebruikelijke besturingsstructuren . Als deze meer dan één instructie moeten bevatten, moet een blok tussen accolades worden gebruikt. Instructies worden afgesloten met een puntkomma. In de meeste gevallen is dit optioneel; de automatische puntkomma-invoeging betekent dat deze meestal automatisch wordt toegevoegd.
if-else (voorwaardelijke verklaring)
als ( voorwaarde ) {
instructies ;
} anders {
instructies ;
}
Afkorting voor voorwaardelijke waardetoewijzingen:
variabele = toestand ? waardeAlsTrue : waardeAlsFalse ;
schakelbesturingsstructuur:
schakelaar ( variabele ) {
case waarde1:
instructies ;
breken ;
case waarde2:
instructies ;
breken ;
standaard :
instructies ;
}
herhalingslus
terwijl ( voorwaarde ) {
instructies ;
}
doe-terwijl lus
doe {
instructies ;
} while ( voorwaarde );
for loop
for ( start-expressie ; voorwaarde ; iteratie- expressie ) {
instructies ;
}
voor ... in lus
Met deze instructie worden alle eigen en geërfde eigenschappen van een object doorlopen, die het interne attribuut Enumerable hebben. [43] Dit attribuut is geïntroduceerd in ECMA Script 5 en is niet ingesteld voor bepaalde ingebouwde eigenschappen (zoals de functie toString van het prototype Object), maar kan meestal door de gebruiker worden ingesteld (en verwijderd). [44] De eigenschapsnaam wordt bij elke lusdoorgang toegewezen aan een gespecificeerde variabele.
for ( laat eigenschapsnaam in object ) {
instructies ;
}
voor... van lus
Deze besturingsstructuur werkt als een for… in lus, met dit verschil dat de opgegeven variabele niet de eigenschapsnaam krijgt, maar de eigenschapswaarde. [45]
voor ( laat waarde van object ) {
instructies ;
}
variabelen
Variabelen moeten in JavaScript worden gedeclareerd met let
of var
en zijn dan geldig binnen het bereik waarin ze zijn gedeclareerd, waarbij let
het bereik meer beperkt dan var
. [46] Als variabelen worden gebruikt zonder ze expliciet te verklaren op voorhand, worden ze impliciet aangegeven als eigenschappen van het globale object (in het browser window
); dit gedrag kan worden bereikt met de instructie "use strict";
voorkomen. Een speciaal kenmerk van JavaScript is het hijsen van variabelen, wat ervoor zorgt dat alle variabelen en functies die in een codesectie zijn gedeclareerd tijdens de verwerking automatisch naar het begin worden gebracht (alleen de declaratie, maar niet hun waardetoewijzing).
Omvang van variabelen
Variabelen gedeclareerd binnen functies of als functieparameters hebben lokale geldigheid; Variabelen die buiten functies zijn gedeclareerd, zijn globaal geldig. Globaal voor JavaScript in browsers betekent dat variabelen die op deze manier zijn gedeclareerd, geldig zijn voor de hele website en voor alle actieve JavaScripts. Aangezien dit kan leiden tot ongewenste neveneffecten met andere scripts die in de pagina zijn geïntegreerd (zoals plug-ins van derden, webanalyse of advertentiebanners), moeten globale variabelen zoveel mogelijk worden vermeden.
laat een , b ; // expliciete declaratie van een globale variabele
een = 1 ; // definitie van een variabele
console . logboek ( een ); // resulteert in 1
c = 2 ; // impliciete verklaring zonder let - er is geen variabele, maar ...
console . logboek ( c ); // geeft 2
console . log (. venster c); // ... er is een eigenschap toegewezen aan het globale object (venster)
console . log (. venster a); // Fout
functie foo ( e ) { // schone declaratie van een functieparameter
laat f , g = 5 ; // schone declaratie en definitie van een lokale variabele
console . logboek ( een ); // globale variabelen zijn overal geldig
console . logboek ( c ); // Ook eigenschappen van het globale object
console . logboek ( e ); // Functieparameters hebben hetzelfde bereik als lokale variabelen
h = 7 ; // de impliciet gedeclareerde h is een globale variabele
}
foo ( een );
console . logboek ( e ); // Fout omdat de functieparameter e alleen geldig is binnen de functie
console . logboek ( f ); // Fout omdat de variabele f alleen geldig is binnen de functie
console . logboek ( h ); // resulteert in 7 - (zie hierboven)
console . log (. venster h); // geeft 7 terug - de globale variabele is een eigenschap van window
constanten
Constanten moeten worden gedeclareerd met const
, ze moeten een waarde krijgen tijdens de initialisatie. Voor het geldigheidsgebied gelden dezelfde voorwaarden als voor variabele declaraties met let
. Constanten kunnen niet worden gewijzigd door ze opnieuw toe te wijzen, maar - als de constanten objecten zijn - kunnen individuele eigenschappen van de constanten worden gewijzigd. [47]
Functies
Functies zijn volwaardige objecten in JavaScript. Ze hebben methoden en eigenschappen, kunnen worden gemaakt en overschreven, worden doorgegeven als argumenten aan functies en kunnen door hen worden gemaakt en geretourneerd.
In het laatste geval wordt een afsluiting gemaakt , ook wel functieafsluiting genoemd, waarmee bijvoorbeeld gegevensinkapseling kan worden gerealiseerd:
laat bericht = functie () {
laat geheim = 42 ;
terugkeer function () {
terug geheim ;
};
};
// bericht is een functie die wordt geretourneerd door bericht
laat bericht = bericht ();
waarschuwing ( soort geheim ); // niet gedefinieerd
waarschuwing ( bericht ()); // 42
Niet elk argument van een functie hoeft te worden opgegeven bij het aanroepen ervan. De waarde undefined is ingesteld voor ontbrekende argumenten; Sinds ECMAScript 2015 kunnen parameters ook worden gedefinieerd met standaardwaarden. De argumenten zijn ook toegankelijk binnen de functie via het object arguments
.
generatie
Er zijn verschillende manieren om functies in JavaScript te maken: [48]
- Functieverklaringen:
functie f ( x , y ) {
keer x + y terug ;
}
- Functie-uitdrukkingen:
laat f = functie ( x , y ) {
keer x + y terug ;
};
- Onmiddellijk aangeroepen functie-uitdrukkingen:
Anonieme functies kunnen ook direct worden uitgevoerd zonder ze eerst aan een variabele toe te wijzen. Dit kan worden gebruikt om het bereik van variabelen in te kapselen.
( functie ( x , y ) {
keer x + y terug ;
}) ( 2 , 3 );
- Genoemde functie-uitdrukkingen:
Aan de variabele f
een functie met de identifier g
toegekend. Buiten de functie kan het worden aangesproken met f
, binnen met f
en g
.
laat f = functie g ( x , y ) {
keer x + y terug ;
};
- Functie Constructeurs:
laat f = nieuwe functie ( 'x' , 'y' , 'retour x + y;' );
- Pijl Functies:
De ronde haakjes zijn optioneel als de functie precies één argument heeft. Als de accolades worden weggelaten, moet u precies één uitdrukking zonder return specificeren als de return-waarde. Elke code kan worden opgegeven met accolades, maar return moet worden gebruikt voor return-waarden.
( x , y ) => x + y ;
( x , y ) => { retour x + y ; };
x => x + 1 ;
x => { retour x + 1 ; };
// Een op deze manier gecreëerde functie kan natuurlijk ook aan een variabele worden toegewezen
laat f = ( x , y ) => x + y ;
voorbeeld
Een functionele en recursieve implementatie van het Euclidische algoritme met twee argumenten ziet er als volgt uit:
functie euclides ( a , b ) {
als ( b === 0 )
retourneer een ;
retourneer euclides ( b , a % b );
}
Implementatie van het Euclidische algoritme met een willekeurig aantal argumenten:
functie ggT (... getallen ) {
if ( nummers . lengte === 0 ) // (1.)
retourneer 0 ;
if ( nummers . lengte === 1 ) // (2.)
return cijfers [0];
nummers terugsturen . verminderen ( euclides ); // (3.)
}
console . log ( ggd ()); // 0
console . log ( ggd ( 4 )); // 4
console . log ( ggd ( 24 , 36 , 84 )); // 12
- Als
ggT
zonder een argument, wordt nul geretourneerd. - Als
ggT
met precies één argument, dan wordt het argument zelf geretourneerd. Dit wordt ook wel identiteit genoemd . - Vermindert
numbers
tot een enkele waarde door twee elementen van links naar rechts tereduce
metreduce
eneuklid
.
Implementatie van het Euclidische algoritme met gedeeltelijke toepassing:
functie ggd ( eerste ) {
if ( eerste === niet gedefinieerd )
retourneer 0 ;
terugkeerfunctie (tweede) {
if ( tweede === ongedefinieerd )
eerst terugkeren ;
return ggd ( euclides ( eerste , tweede ));
};
}
console . log ( ggd ()); // 0
console . log ( ggd ( 4 ) ()); // 4
console . log ( ggd ( 24 ) ( 36 ) ( 84 ) ()); // 12
Voorwerpen
Objecten in JavaScript bestaan uit eigenschappen die zijn geïmplementeerd als naam/waarde-paren. Er wordt geen onderscheid gemaakt tussen attributen en methoden van het object (een eigenschap waarvan de waarde het type Functie heeft , fungeert als een methode). Elk object - zelfs objecten die door letterlijke waarden zijn gemaakt - erft van het prototype van de globale objectconstructor.
Vooraf gedefinieerde objecten
JavaScript kent verschillende ingebouwde objecten en objecttypen die zijn gedefinieerd in de ECMAScript-standaard. Een objecttype wordt weergegeven door een constructorfunctie met dezelfde naam, waarmee objecten van het overeenkomstige type kunnen worden gemaakt en die ook een verwijzing naar het prototype van het objecttype bevat.
- Het naamloze globale object dat alle variabelen en objecten bevat.
- Het objecttype
Object
waarvan alle objecten zijn afgeleid. - Het objecttype
Function
van functies . - De
Array
van arrays- objecttype. - Der Objekttyp
String
von Zeichenketten . - Der Objekttyp
Boolean
von boolesche Variablen . - Der Objekttyp
Number
von Zahlen (64-Bit- Gleitkommazahlen gemäß IEEE 754 ). - Der Objekttyp
Date
für Datumsformate ( Daten bzw. Zeitpunkte). - Der Objekttyp
RegExp
für reguläre Ausdrücke . - Der Objekttyp
Error
zur Charakterisierung (und ggf. nachfolgenden Auslösung mittelsthrow
) von Laufzeitfehlern . - Das Objekt
Math
stellt Konstanten und Methoden für mathematische Operationen bereit. - Das Objekt
JSON
stellt zwei Methoden für die Serialisierung von Objekten ins JSON -Format und umgekehrt bereit. - Das Objekt
Reflect
stellt Methoden für die Ermittlung und Änderung der Metadaten eines Objekts bereit.
Weitere Objekte, die beim clientseitigen JavaScript verwendet werden, entstanden historisch vor allem durch die Netscape -Spezifikationen ( window
, document
usw.). Das window
-Objekt selbst ist dabei de facto das globale Objekt, indem einfach einer Variablen window
das globale Objekt zugewiesen wurde. Zahlreiche Unterobjekte von document
wurden mittlerweile durch DOM HTML standardisiert ( title
, images
, links
, forms
usw.). Aktuelle Browser unterstützen zudem DOM Core und andere W3C -DOM-Standards sowie Erweiterungen von Microsoft JScript .
Zugriff auf Objekteigenschaften und -methoden
Eigenschaften von Objekten (auch Methoden sind Eigenschaften) können wie folgt angesprochen werden:
- Punkt-Notation (mit statischen Bezeichnern )
objekt . eigenschaft ;
objekt . methode ( parameter1 , parameter2 );
- Klammer-Notation (mit dynamischen Bezeichnern )
objekt [ "eigenschaft" ];
objekt [ "methode" ]( parameter1 , parameter2 );
// Eigenschaftsname, der in Punktnotation illegal wäre
objekt [ "methode 1" ]();
// So können auch alle Eigenschaften des Objekts durchlaufen werden
for ( let eigenschaftsName in objekt ) {
console . log ( eigenschaftsName , " = " , objekt [ eigenschaftsName ]);
}
Zu allen Objekten können zur Laufzeit neue Eigenschaften hinzugefügt oder mit delete
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:
delete objekt . eigenschaftA ;
delete objekt [ "eigenschaftB" ];
Objektliterale
Objekte können in JavaScript direkt anhand ihrer Eigenschaften definiert werden:
let meinObjekt = {
zahl : 42 ,
gibZahl : function () {
return this . zahl ;
}
};
alert ( meinObjekt . gibZahl ()); // 42
Eine spezielle Notation gibt es für reguläre Ausdrücke:
// mit Konstruktorfunktion
( new RegExp ( "a" )). test ( "ab" ); // true
// als Literal
/a/ . test ( "ab" ); // true
Konstruktor-Funktionen
Eine Funktion kann dazu genutzt werden, um ein mit new
erstelltes Objekt zu initialisieren. In diesem Fall spricht man von einem Konstruktor oder einer Konstruktor-Funktion. Innerhalb dieser Funktion kann das neue Objekt über die Variable this
angesprochen werden.
function MeinObjekt ( x ) { // Konstruktor
this . zahl = x ;
}
let objekt = new MeinObjekt ( 3 ); // Instanz erzeugen
alert ( objekt . zahl ); // per Meldefenster ausgeben (3)
„Private“ Eigenschaften
Private Eigenschaften und Methoden sind nicht explizit Teil der Sprache.
Mit Hilfe von Closures (siehe Funktionen ) lassen sich dennoch private Eigenschaften von Objekten realisieren:
let erschaffeKatze = function () {
let lebensZahl = 7 ;
let maunz = function () {
return ( lebensZahl > 0 ) ? "miau" : "örks" ;
};
// gibt neues Objekt zurück
return {
toeten : function () {
lebensZahl -= 1 ;
alert ( maunz ());
}
};
};
let otto = erschaffeKatze ();
otto . toeten (); // miau
Lediglich die toeten
-Methode von otto
kennt die Variable lebensZahl
. Der Effekt gleicht dem einer privaten Eigenschaft, wenn alle Methoden der Katze in der erzeugenden Funktion erschaffeKatze
definiert werden. lebensZahl
ist dann für alle Methoden (privilegierte Methoden, im Beispiel toeten
) und inneren Funktionen der erzeugenden Funktion (private Methoden, im Beispiel maunz
) sichtbar, nicht jedoch von außen oder von nachträglich an das Objekt gehängten Methoden.
Vererbung über Prototypen
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:
let fisch = {
augen : 2
};
let Mutantenfisch = function () {
this . augen = 3 ;
};
Mutantenfisch . prototype = fisch ;
let blinky = new Mutantenfisch ();
// eigene Eigenschaft von blinky
alert ( blinky . augen ); // 3
// blinkys eigene Eigenschaft wird gelöscht
delete blinky . augen ;
// blinky hat die Eigenschaft selbst nicht mehr,
// es schimmert die Eigenschaft des Prototyps durch
alert ( 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
Die in JavaScript im Regelfall völlig dynamische Struktur eines Objekts obj
kann in verschiedener Hinsicht fixiert werden: Nach dem Methodenaufruf Object.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 Aufruf Object.freeze(obj)
fixiert sowohl die Objektstruktur wie auch die Attributwerte inklusive der Methoden gegen nachfolgende Veränderungen. Die betreffenden Status eines Objekts obj
können mit Object.isExtensible(obj)
, Object.isSealed(obj)
und Object.isFrozen(obj)
ermittelt werden.
Es ist auch möglich, nur ein einzelnes Attribut eines Objekts obj
zu fixieren. Beispielsweise wird mit dem Aufruf
Object.defineProperty(obj, "vorname", {writable:false});
das Attribut obj.vorname
schreibgeschützt. [49]
Delegationsprinzipien
JavaScript ist eine Delegationssprache 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 [50] wie z. B. Traits [51] [52] und Mixins . [53] [54] Zusätzliches Verhalten wird bereitgestellt, indem mindestens eine Methode über das Schlüsselwort
this
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ährend Komposition 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 wird Vererbung in JavaScript über einen selbstausführenden Delegationsmechanismus abgebildet, der an die
prototype
-Eigenschaft von Konstruktorfunktionen gebunden ist.
Fehlerbehandlung
Ab Version 3 verfügt ECMAScript über eine von Java übernommene Fehlerbehandlung . Die Anweisung try … catch … finally
fängt Ausnahmen ( exceptions ) ab, die aufgrund eines Fehlers oder einer throw
-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 im try
-Block ausgeführt. Falls eine Ausnahme auftritt, wird der Kontrollfluss sofort zum catch
-Block mit dem Ausnahmeobjekt als Parameter umgeleitet.
Im Normalfall wird der Ausnahmeblock übersprungen. Nach der Ausführung des try
-Blocks (auch teilweise) und gegebenenfalls des catch
-Blocks werden in jedem Fall die Anweisungen im finally
-Block ausgeführt. Der finally
-Teil kann weggelassen werden, alternativ der catch
-Teil.
Einige Laufzeitumgebungen wie V8 (und somit Node.js ) und auch viele Webbrowser stellen gesonderte Error-Objekte zur Verfügung, die neben der Fehlermeldung auch einen Stacktrace und weitere Zusatzinformationen transportieren können. [55] [56] [57] Um diese Vorteile zu nutzen, ändert man im einfachsten Anwendungsfall den throw
-Befehl von throw "Meldungstext" ;
zu throw new Error ( "Meldungstext" );
. [58]
Klammern um den Parameter des throw
-Befehls sind im Allgemeinen nicht notwendig. [49] 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 zwischen throw
und die öffnende Klammer einfügt.
JavaScript-Bibliotheken
Um die Erstellung von Webanwendungen mit Hilfe von JavaScript zu erleichtern, gibt es diverse Bibliotheken und Frameworks . Eine Bibliothek ist eine Sammlung von Funktionen , die der Programmierer nutzen kann. Ein Framework fordert darüber hinaus durch ein besonderes Maß an Abstraktion eine bestimmte Struktur der Programmierung.
Ausgelöst von neuen Konzepten wie Ajax entstand seit 2004 ein neues Interesse für JavaScript. JavaScript wird zunehmend für Rich-Client -Anwendungen benutzt, die das Aussehen und die Bedienung von herkömmlichen Desktop -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 dem DOM sowie grafische Effekte wie Animationen . Aber auch schon vor dem breiten Einsatz von Ajax existierten Funktionssammlungen zur Unterstützung der browserübergreifenden Programmierung. [59]
Zu den bekannten JavaScript-Bibliotheken und Frameworks zählen AngularJS , Dojo Toolkit , Ext JS , jQuery , MooTools , Prototype , Qooxdoo , React , Vue.js und die Yahoo User Interface Library . Speziell mit grafischen Effekten beschäftigen sich Moo.fx und Script.aculo.us . Für die serverseitige Programmierung mittels Node.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 per Polyfill nach.
JavaScript & Suchmaschinenoptimierung (SEO)
Suchmaschinen gehen unterschiedlich mit der Verarbeitung von Javascript-Inhalten um, wodurch es in den letzten Jahren immer wieder zu Fällen gekommen ist, dass Website teilweise oder gänzlich nicht in Suchmaschinen auffindbar waren. Der Suchmaschinenbetreiber Google kann laut eigenen Aussagen JavaScript-Inhalte crawlen, rendern und indexieren. [60] 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 via Suchmaschinenoptimierung aufgefunden werden können. Dazu zählen serverseitiges oder 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 der Googlebot Webinhalte erfasst. [61]
Siehe auch
- ActionScript – Bezeichnung für eine JavaScript-ähnliche Skriptsprache in Flash und Macromedia Director, wo es alternativ zu Lingo verwendet werden kann
- Aktive Inhalte
- Bookmarklet – kleine JavaScript-Programme im Browser
- Dart (Programmiersprache)
Literatur
- Jörg Bewersdorff : Objektorientierte Programmierung mit JavaScript: Direktstart für Einsteiger . 2. Auflage. Wiesbaden 2018, ISBN 978-3-658-21076-2 , doi : 10.1007/978-3-658-21077-9 .
- Philip Ackermann: JavaScript. Das umfassende Handbuch. 1. Auflage. Galileo Press, Bonn 2016, ISBN 978-3-8362-3838-0 .
- Nicholas Zakas: JavaScript objektorientiert: Verständlicher, flexibler, effizienter programmieren . Heidelberg 2014, ISBN 978-3-86490-202-4 .
- Peter Kröner: ECMAScript 5 – Entwickeln mit dem aktuellen JavaScript-Standard. 1. Auflage. Open Source Press, München 2013, ISBN 978-3-95539-063-1 .
- David Flanagan: JavaScript – das umfassende Referenzwerk. 6. Auflage. O'Reilly, Köln 2012, ISBN 978-3-86899-135-2 .
- David Flanagan: JavaScript – kurz & gut. 4. Auflage. O'Reilly, Köln 2012, ISBN 978-3-86899-388-2 .
- Christian Wenz: JavaScript und AJAX. Das umfassende Handbuch. 9. Auflage. Galileo Press, Bonn 2009, ISBN 978-3-89842-859-0 (openbook.galileocomputing.de ).
- Stefan Koch: JavaScript. Einführung, Programmierung, Referenz – inklusive Ajax. 5. Auflage. dpunkt-Verlag, Heidelberg 2009, ISBN 978-3-89864-594-2 .
- Douglas Crockford : Das Beste an JavaScript. O'Reilly, Köln 2008, ISBN 978-3-89721-876-5 .
- Paul Fuchs: JavaScript Programmieren für Einsteiger: Der leichte Weg zum JavaScript-Experten. BMU Verlag, Landshut 2019, ISBN 978-3-96645-016-4
Weblinks
- Linkkatalog zum Thema JavaScript bei curlie.org (ehemals DMOZ )
- JavaScript – Geschichte, Struktur, Eigenschaften und die Zukunft der wichtigsten Programmiersprache des Webs. (MP3 97,5 MB) In: Chaosradio Express CRE146. 27. Februar 2010, abgerufen am 27. Februar 2010 .
- Addy Osmani: Learning JavaScript Design Patterns. Abgerufen am 24. Mai 2013 (englisch, Entwurfsmuster in JavaScript).
- Lizenz
Spezifikationen
- ISO-genormte ECMAScript-Spezifikation (ISO/IEC 16262:2002) (englisch/französisch)
- ECMAScript-Spezifikation (englisch, PDF; 3,1 MiB) ( HTML-Version )
- Referenz von Mozilla (deutsch)
- Übersicht über die Neuerungen in JavaScript (englisch)
Dokumentationen
- JavaScript-Kapitel bei SELFHTML-Wiki
- Objektorientierung in JavaScript
- Eloquent JavaScript (Frei verfügbares E-Book, englisch)
Einzelnachweise
- ↑ speakingjs.com .
- ↑ ECMAScript® 2020 Language Specification . In: www.ecma-international.org . Ecma International. 30. Juni 2020. Abgerufen am 17. Juni 2021.
- ↑ 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.).
- ↑ a b Olaf Göllner: JavaScript für Mikrocontroller. In: heise online. Verlag Heinz Heise, 13. August 2013, abgerufen am 27. Juli 2016 .
- ↑ a b Olaf Göllner: Tessel: JavaScript-Entwicklerboard fürs "Internet der Dinge". In: heise online. Verlag Heinz Heise, 15. August 2013, abgerufen am 27. Juli 2016 .
- ↑ 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.).
- ↑ Jens Ihlenfeld: Node – strikt ereignisorientierter Javascript-Server. In: Golem.de. 24. November 2009, abgerufen am 27. Juli 2016 .
- ↑ Steve Champeon: JavaScript: How Did We Get Here? In: Web DevCenter. O'Reilly, 6. April 2001, archiviert vom Original am 19. Juli 2016 ; abgerufen am 27. Juli 2016 (englisch).
- ↑ Chris Mills: A Short History of JavaScript. In: Web Education Community Group Wiki. W3C, 27. Juli 2012, abgerufen am 27. Juli 2016 (englisch).
- ↑ Markeneintrag #75026640 beim USPTO für JavaScript. In: uspto.gov. United States Patent and Trademark Office , 6. Mai 1997, abgerufen am 24. Oktober 2012 (englisch).
- ↑ 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 .
- ↑ Klaus-Peter Kerbusk: Mißbrauch des Monopols . In: Der Spiegel . Nr. 44 , 1997 ( online ).
- ↑ Scripting for the Java Platform. In: Java SE Documentation. Oracle , abgerufen am 24. Oktober 2012 (englisch).
- ↑ Florian Scholz, Eric Shepherd: New in JavaScript 1.3. In: Mozilla Developer Network. Mozilla Foundation, 20. Januar 2016, abgerufen am 27. Juli 2016 (englisch).
- ↑ Florian Scholz, Eric Shepherd: New in JavaScript 1.4. In: Mozilla Developer Network. Mozilla Foundation, 20. Januar 2016, abgerufen am 27. Juli 2016 (englisch).
- ↑ New Features in this Release. In: DevEdge Online Documentation. Netscape Communications Corporation, 29. Oktober 1998, archiviert vom Original am 2. August 2004 ; abgerufen am 27. Juli 2016 (englisch).
- ↑ Florian Scholz, Eric Shepherd: New in JavaScript 1.5. In: Mozilla Developer Network. Mozilla Foundation, abgerufen am 20. Januar 2016 (englisch).
- ↑ 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).
- ↑ 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).
- ↑ 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).
- ↑ John Resig: Versions of JavaScript. In: johnresig.com/. 22. April 2008, abgerufen am 8. Juni 2020 (englisch).
- ↑ ECMAScript 2020 Language Specification. Juni 2020, abgerufen am 19. Juni 2020 (englisch).
- ↑ Julia Schmidt: Standard für ECMAScript soll jährlich Updates erhalten. In: heise Developer. 23. Januar 2015, abgerufen am 22. Oktober 2015 .
- ↑ tc39/ecma262. In: GitHub. Abgerufen am 2. Januar 2017 .
- ↑ Changes to JavaScript, Part 1: EcmaScript 5
- ↑ ECMAScript 2015 Language Specification. Abgerufen am 2. Januar 2017 (englisch).
- ↑ 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 im Internet Archive )
- ↑ ECMAScript 6 compatibility table. In: kangax.github.io. Abgerufen am 2. Januar 2017 (englisch).
- ↑ Nicholas C. Zakas: Professional JavaScript for Web Developers . John Wiley & Sons., 2011, ISBN 978-1-118-02669-4 (englisch, 960 S.).
- ↑ ECMAScript 2017 Language Specification. Juni 2017, abgerufen am 5. Dezember 2017 (englisch).
- ↑ JavaScript-Standard ECMAScript 2016 offiziell verabschiedet. In: heise online. heise Developer, 17. Juni 2016, abgerufen am 3. Januar 2017 .
- ↑ a b ECMAScript Next compatibility table. In: kangax.github.io. Abgerufen am 2. Januar 2017 .
- ↑ ECMAScript 2017 Language Specification. Ecma International, Juni 2017, abgerufen am 4. August 2017 (englisch).
- ↑ Christian Liebel: Evolution im Web: ECMAScript 2017. heise Developer, 1. August 2017, abgerufen am 4. August 2017 .
- ↑ ECMAScript 2017. In: Exploring ES2016 and ES2017. 22. März 2017, abgerufen am 4. August 2017 (englisch).
- ↑ JavaScript-Standard ECMAScript 2018 offiziell verabschiedet heise.de, am 28. Juni 2018
- ↑ Tracking ECMAScript Proposals. In: TC39. Ecma, abgerufen am 4. August 2017 (englisch).
- ↑ ECMAScript 2019: Neun Neuerungen für den JavaScript-Sprachstandard. In: heise online. heise online, 4. Februar 2019, abgerufen am 17. April 2020 .
- ↑ JavaScript: Die Features für ECMAScript 2020 stehen fest. In: heise online. heise online, 6. April 2020, abgerufen am 19. Juni 2020 .
- ↑ W3C Working Draft 24 September 2015. In: w3.org. Abgerufen am 28. Juli 2016 .
- ↑ Ilja Zaglov: TypeScript: Microsoft's neue JavaScript Erweiterung. In: t3n Magazin . 10. Oktober 2012, abgerufen am 10. Oktober 2012 .
- ↑ JavaScript/Objekte/Array. In: SELFHTML. 15. Juli 2016, abgerufen am 27. Juli 2016 .
- ↑ for…in MDN
- ↑ Object.defineProperty() MDN
- ↑ for…of MDN
- ↑ JavaScript/Variable/let im SELFHTML-Wiki
- ↑ JavaScript/Variable/const im SELFHTML-Wiki
- ↑ Juriy Kangax Zaytsev: Named function expressions demystified. In: kangax.github.io. 17. Juni 2009, abgerufen am 28. Juli 2016 (englisch).
- ↑ a b ECMAScript Language Specification – ECMA-262 Edition 5.1. In: ecma-international.org. Abgerufen am 28. Juli 2016 . ( ecma-international.org PDF).
- ↑ Englische Wikipedia: Role-oriented programming
- ↑ Traits for Javascript , 2010.
- ↑ CocktailJS – ANNOTATIONS. TRAITS. TALENTS. , April 2013.
- ↑ Angus Croll, A fresh look at JavaScript Mixins vom 31. Mai 2011.
- ↑ Die vielen Talente von JavaScript Rollen-orientierte Programmieransätze wie Traits und Mixins verallgemeinern zu können , 5. Juni 2014.
- ↑ JavaScript Stack Trace API in Google V8 Wiki , Stand 28. Juni 2010, abgerufen am 23. Februar 2013
- ↑ JavaScript Core Reference: Error ( Memento vom 4. November 2014 im Internet Archive ) in Aptana HTML Reference , Stand 2. Juli 2012, abgerufen am 23. Februar 2013
- ↑ Tom DuPont: Report Unhandled Errors from JavaScript. 13. April 2013, abgerufen am 16. April 2013 (englisch, Fehlerprotokollierung mit Stacktrace in JavaScript).
- ↑ Nico Reed: What is the error object? ( Memento vom 31. März 2013 im Internet Archive ) In: Nodejitsu Documentation , Stand 26. August 2011, abgerufen am 23. Februar 2013.
- ↑ 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.).
- ↑ Grundlagen von JavaScript-SEO | Google Search Central. Abgerufen am 7. Dezember 2020 .
- ↑ Web developer tools for debugging JavaScript issues in Google Search. Abgerufen am 7. Dezember 2020 (englisch).