JavaScript
![]() Screenshot des JavaScript -Quellcode | |
Paradigma | Multi-Paradigma: ereignisgesteuert, funktional, Imperativ, prozedural, Objekt orientierte Programmierung |
---|---|
Entworfen von | Brendan Eich von Netscape anfänglich; Andere haben ebenfalls zu dem beigetragen ECMaskript Standard |
Erstmals erschienen | 4. Dezember 1995[1] |
Stabile Version | ECMascript 2021[2] ![]() |
Vorschau -Version | ECMascript 2022[3] ![]() |
Disziplin tippen | Dynamisch, schwach, Ente |
Dateiname -Erweiterungen |
|
Webseite | www |
Haupt Implementierungen | |
V8, JavaScriptcore, Spinnenaffe, Chakra | |
Beeinflusst von | |
Java,[5][6] Planen,[6] Selbst,[7] Awk,[8] Hypertalk[9] | |
Beeinflusst | |
Aktionen, Assemblyskript, CoffeeScript, Pfeil, Haxe, JS ++, Objektiv-j, Opa, Typoskript | |
|
JavaScript (/ˈdʒːvəskrɪpt/),[10] oft abgekürzt JS, ist ein Programmiersprache Das ist eine der Kerntechnologien der Weltweites Netz, neben Html und CSS.[11] Ab 2022 98% von Websites Verwenden Sie JavaScript auf der Klient Seite für Website Verhalten,[12] Oft einbeziehen Bibliotheken.[13] Alle großen Internetbrowser einen engagierten haben JavaScript -Engine um die auszuführen Code an Benutzer' Geräte.
JavaScript ist a hohes Level, häufig Just-in-Time Compiled Sprache, die dem entspricht ECMaskript Standard.[14] Es hat Dynamisches Typing, Prototypbasiert Objektorientierung, und erstklassige Funktionen. es ist Multi-ParadigmaUnterstützung ereignisgesteuert, funktional, und Imperativ Programmierstile. Es hat Anwendungsprogrammierschnittstellen (APIs) für die Arbeit mit Text, Daten, Reguläre Ausdrücke, Standard Datenstrukturen, und die Dokumentobjektmodell (DOM).
Der ECMascript -Standard enthält keine enthalten Input-Output (I/o), wie z. Networking, Lagerung, oder Grafik Einrichtungen. In der Praxis der Webbrowser oder andere Laufzeitsystem Bietet JavaScript -APIs für E/O.
JavaScript -Motoren wurden ursprünglich nur in Webbrowsern verwendet, sind aber jetzt Kernkomponenten einiger Server und eine Vielzahl von Anwendungen. Das beliebteste Laufzeitsystem für diese Verwendung ist Node.js.
Obwohl Java und JavaScript sind im Namen ähnlich, Syntax, und jeweils StandardbibliothekenDie beiden Sprachen sind unterschiedlich und unterscheiden sich stark im Design.
Geschichte
Schöpfung bei Netscape
Der Erste Webbrowser mit einer grafische Benutzeroberfläche, Mosaik, wurde 1993 veröffentlicht. Es spielte für nicht-technische Menschen eine herausragende Rolle beim schnellen Wachstum des Auftretens Weltweites Netz.[15] Die Hauptentwickler von Mosaic gründeten dann die Netscape Unternehmen, das einen polierten Browser veröffentlichte, Netscape Navigator1994. Dies wurde schnell am häufigsten verwendeten.[16][17]
Während dieser prägenden Jahre des Webs, Webseiten konnte nur statisch sein, ohne dass die Fähigkeit für dynamisches Verhalten nach dem Laden der Seite in den Browser geladen wurde. In der florierenden Webentwicklungsszene war der Wunsch, diese Einschränkung zu beseitigen. 1995 entschied sich Netscape, a hinzuzufügen Skriptsprache Navigator. Sie verfolgten zwei Routen, um dies zu erreichen: Zusammenarbeit mit Sun Microsystems um die zu betten Java Programmiersprachewährend gleicher Einstellung Brendan Eich um die zu betten Planen Sprache.[6]
Netscape Management entschied bald, dass Eich die beste Option darin bestand, eine neue Sprache zu entwickeln, wobei die Syntax ähnlich wie Java und weniger ähnliches Schema oder andere vorhandene Skriptsprachen ist.[5][6] Obwohl die neue Sprache und ihre Dolmetscher Die Implementierung wurde als Livescript bezeichnet, als er zum ersten Mal als Teil eines Navigators versandt wurde Beta Im September 1995 wurde der Name für die offizielle Veröffentlichung im Dezember in JavaScript geändert.[6][1][18]
Die Wahl des JavaScript -Namens hat Verwirrung verursacht, was bedeutet, dass er in direktem Zusammenhang mit Java steht. Zu der Zeit die Dot-Com-Boom hatte begonnen und Java war die heiße neue Sprache, also betrachtete Eich den JavaScript -Namen als Marketing -Trick von Netscape.[19]
Einführung von Microsoft
Microsoft debütiert Internet Explorer im Jahr 1995, was zu a führt Browserkrieg mit Netscape. Auf der JavaScript -Front Microsoft dekompiliert der Navigator Dolmetscher seine eigene schaffen, genannt Jscript.[20]
Jscript wurde erstmals 1996 zusammen mit der ersten Unterstützung für die erste Unterstützung für CSS und Erweiterungen zu Html. Jede dieser Implementierungen unterschieden sich merklich von ihren Kollegen im Navigator.[21][22] Diese Unterschiede haben es den Entwicklern schwierig gemacht, ihre Websites in beiden Browsern gut funktionieren zu lassen, was zu einer breiten Nutzung der "Besten in Netscape" und "Besten" Logos "Best Sichtweise in Internet Explorer" seit mehreren Jahren führte.[21][23]
Der Aufstieg von Jscript
Im November 1996, Netscape Eingereichtes JavaScript an ECMA Internationalals Ausgangspunkt für eine Standardspezifikation, die alle Browser -Anbieter entsprechen könnten. Dies führte zur offiziellen Veröffentlichung des ersten ECMaskript Sprachspezifikation im Juni 1997.
Der Standardprozess dauerte einige Jahre lang mit der Veröffentlichung von ECMascript 2 im Juni 1998 und ECMAScript 3 im Dezember 1999. Die Arbeiten zu ECMascript 4 begannen im Jahr 2000.[20]
In der Zwischenzeit, Microsoft gewann eine zunehmend dominantere Position auf dem Browsermarkt. In den frühen 2000er Jahren erreichte der Marktanteil von Internet Explorer 95%.[24] Das bedeutete das Jscript wurde der de facto Standard für Client-Seite Scripting im Internet.
Microsoft nahm zunächst am Standardprozess teil und implementierte einige Vorschläge in seiner Jscript -Sprache, hat jedoch schließlich die Zusammenarbeit an der ECMA -Arbeit eingestellt. Somit wurde ECMascript 4 mottenballerisch.
Wachstum und Standardisierung
Während der Zeit von Internet Explorer Die Dominanz in den frühen 2000er Jahren war stagnierend, clientseitiges Skript. Dies begann sich 2004 zu ändern, als der Nachfolger von Netscape, Mozilla, veröffentlichte die Feuerfuchs Browser. Firefox wurde von vielen gut aufgenommen und nahm einen erheblichen Marktanteil von Internet Explorer.[25]
Im Jahr 2005 kam Mozilla zu ECMA International und begann die Arbeiten an der ECMascript für XML (E4X) Standard. Dies führte dazu, dass Mozilla gemeinsam mit arbeitete Makromedia (später erworben von Adobe Systems), die E4X in ihrer ActionScript 3 -Sprache implementierten, die auf einem ECMascript 4 -Entwurf basiert. Das Ziel wurde als neue ECMAScript 4. Standardisierung von ActionScript 3 zur Standardisierung von Adobe Systems veröffentlicht die Tamarin Implementierung als An Open Source Projekt. Tamarin und ActionScript 3 unterschieden sich jedoch zu zu etablierten clientseitigen Skripten und ohne Zusammenarbeit von Microsoft, ECMascript 4 erreichte nie die Treuung.
In der Zwischenzeit traten in Open-Source-Gemeinschaften, die nicht der ECMA-Arbeit angeschlossen waren, sehr wichtige Entwicklungen auf. Im Jahr 2005, Jesse James Garrett veröffentlichte ein Weißbuch, in dem er den Begriff geprägt hatte Ajax und beschrieb eine Reihe von Technologien, von denen JavaScript das Rückgrat war, um zu erstellen Web Applikationen Wenn Daten im Hintergrund geladen werden können, vermeiden Sie die Notwendigkeit einer vollständigen SEITE -Nachladen. Dies löste eine Renaissance-Periode von JavaScript aus, die von Open-Source-Bibliotheken und den um sie herum gebildeten Gemeinden angeführt wurde. Es wurden viele neue Bibliotheken erstellt, einschließlich JQuery, Prototyp, Dojo -Toolkit, und Mootools.
Google debütierte seine Chrom Browser im Jahr 2008 mit dem V8 JavaScript -Engine, die schneller als seine Konkurrenz war.[26][27] Die Hauptinnovation war Just-in-Time-Zusammenstellung (JIT),[28] Andere Browserverkäufer mussten also ihre Motoren für JIT überarbeiten.[29]
Im Juli 2008 kamen diese unterschiedlichen Parteien für eine Konferenz in zusammen in Oslo. Dies führte zu einer eventuellen Vereinbarung Anfang 2009, alle relevanten Arbeiten zu kombinieren und die Sprache voranzutreiben. Das Ergebnis war der im Dezember 2009 veröffentlichte ECMAScript 5 Standard.
Reife erreichen
Die ehrgeizige Arbeit an der Sprache wurde mehrere Jahre fortgesetzt und gipfelte in einer umfangreichen Sammlung von Ergänzungen und Verfeinerungen, die mit der Veröffentlichung von formalisiert wurden ECMaskript 6 im Jahr 2015.[30]
Die Kreation von Node.js 2009 von Ryan Dahl Die Verwendung von JavaScript außerhalb von Webbrowsern löste einen signifikanten Anstieg. Knoten kombiniert die V8 Motor, an Ereignisschleife, und I/o Apisdamit ein eigenständiges JavaScript-Laufzeitsystem.[31][32] Ab 2018 wurde der Knoten von Millionen von Entwicklern verwendet,[33] und NPM hatte die meisten Module von allen Paket-Manager in der Welt.[34]
Die Spezifikation des ECMAScript -Entwurfs wird derzeit offen aufbewahrt GitHubund Editionen werden über reguläre jährliche Schnappschüsse produziert.[35] Mögliche Überarbeitungen der Sprache werden durch einen umfassenden Vorschlagsprozess überprüft.[36][37] Anstelle von Editionsnummern überprüfen Entwickler den Status der kommenden Funktionen einzeln.[35]
Das aktuelle JavaScript -Ökosystem hat viele Bibliotheken und Frameworks, etablierte Programmierpraktiken und erhebliche Verwendung von JavaScript außerhalb von Webbrowsern. Außerdem mit dem Aufstieg von Einseitige Anwendungen und andere javascript-strenge Websites, mehrere Transpiler wurden geschaffen, um den Entwicklungsprozess zu unterstützen.[38]
Warenzeichen
"JavaScript" ist a Warenzeichen von Oracle Corporation in den Vereinigten Staaten.[39][40]
Website Client-Seite-Nutzung
JavaScript ist der dominante Client-Seite Skriptsprache des Webs mit 98% von allen Websites (Mitte -2022) Verwenden Sie es zu diesem Zweck.[12] Skripte sind eingebettet oder enthalten von Html Dokumente und interagieren mit dem Dom. Alle großen Internetbrowser eingebaut haben JavaScript -Engine Dadurch wird der Code auf dem Gerät des Benutzers ausgeführt.
Beispiele für Skriptverhalten
- Neues Laden Website Inhalt ohne das Nachladen der Seite über via Ajax oder ein Websocket. Zum Beispiel, Benutzer von sozialen Medien kann Nachrichten senden und empfangen, ohne die aktuelle Seite zu verlassen.
- Webseitenanimationen wie das Verblassen von Objekten ein- und außen, die Größe und das Verschieben.
- Spielen Browserspiele.
- Kontrolle der Wiedergabe von Streaming Medien.
- Erstellen Pop-Up Werbung.
- Validieren Eingabewerte von a Web-Formular bevor die Daten an a gesendet werden Webserver.
- Protokollieren Sie Daten über das Verhalten des Benutzers und senden Sie es an einen Server. Der Website -Eigentümer kann diese Daten für verwenden Analyse, Anzeigenverfolgung, und Personalisierung.
- Einen Benutzer auf eine andere Seite umleiten.
Bibliotheken und Frameworks
Über 80% der Websites verwenden ein JavaScript von Drittanbietern Bibliothek oder Web Framework für ihre kundenseitigen Skripten.[13]
JQuery ist bei weitem die beliebteste Bibliothek, die von über 75% der Websites verwendet wird.[13] Facebook erstellt die Reagieren Bibliothek für seine Website und später veröffentlicht sie als Open Source; andere Websites, einschließlich TwitterVerwenden Sie es jetzt. Ebenso das Eckig Framework erstellt von Google für seine Websites, einschließlich Youtube und Google Mailist jetzt ein Open -Source -Projekt, das von anderen verwendet wird.[13]
Im Gegensatz dazu wurde der Begriff "Vanilla js" für Websites geprägt, die keine Bibliotheken oder Frameworks verwenden, sondern stützt sich ausschließlich auf die Standard -JavaScript -Funktionalität.[41]
Andere Verwendung
Die Verwendung von JavaScript hat sich über seine hinaus erweitert Webbrowser Wurzeln. JavaScript -Motoren sind jetzt in eine Vielzahl anderer Softwaresysteme eingebettet, beide für Server-Seite Website-Bereitstellungen und Nicht-Browser Anwendungen.
Erste Versuche zur Förderung der serverseitigen JavaScript-Verwendung waren Netscape Enterprise Server und Microsoft's Internetinformationsdienste,[42][43] Aber sie waren kleine Nischen.[44] Die serverseitige Nutzung begann schließlich Ende der 2000er Jahre mit der Erstellung von zu wachsen Node.js und Andere Ansätze.[44]
Elektron, Cordova, Reagieren nativ, und andere Anwendungsrahmen wurden verwendet, um viele Anwendungen mit in JavaScript implementiertem Verhalten zu erstellen. Andere Nicht-Browser-Anwendungen umfassen Adobe Acrobat Unterstützung für das Skripten PDF Unterlagen[45] und Gnomschale Erweiterungen in JavaScript.[46]
JavaScript hat kürzlich in einigen erscheinen eingebettete Systemenormalerweise durch Nutzung von Node.js.[47][48][49]
Merkmale
Die folgenden Merkmale sind allen konformen ECMAScript -Implementierungen gemeinsam, sofern nicht ausdrücklich anders angegeben.
Imperativ und strukturiert
JavaScript unterstützt einen Großteil der Strukturierte Programmierung Syntax von C (z.B., wenn
Aussagen, während
Schleifen, Schalter
Aussagen, tu während
Schleifen usw.). Eine teilweise Ausnahme ist Scoping: ursprünglich hatte JavaScript nur nur Funktionsvorgänge mit var
; Block Scoping wurde in ECMascript 2015 mit den Schlüsselwörtern hinzugefügt Lassen
und Const
. Wie C unterscheidet JavaScript zwischen Ausdrücke und Aussagen. Ein syntaktischer Unterschied zu C ist Automatische Semikoloninsertion, mit denen Semikolone (mit der Aussagen beenden) weggelassen werden können.[50]
Schwach tippt
JavaScript ist schwach tipptDies bedeutet, dass bestimmte Typen je nach verwendeten Vorgang implizit gegossen werden.[51]
- Das Binär
+
Der Bediener leitet beide Operanden in eine Zeichenfolge aus, es sei denn, beide Operanden sind Zahlen. Dies liegt daran - Das Binär
-
Der Betreiber wirft immer beide Operanden auf eine Zahl aus - Beide unary Operatoren (
+
,-
) Gießen Sie den Operanden immer auf eine Zahl
Werte werden wie folgt auf Zeichenfolgen gegossen:[51]
- Saiten bleiben wie Is übrig
- Zahlen werden in ihre String -Darstellung konvertiert
- Arrays haben ihre Elemente in Saiten gegossen, wonach sie von Kommas begleitet werden (
,
) - Andere Objekte werden in die Zeichenfolge konvertiert
[Objektobjekt]
woObjekt
ist der Name des Konstruktors des Objekts
Die Werte werden auf Zahlen gegossen, indem sie in Saiten gegossen und dann die Saiten in Zahlen werfen. Diese Prozesse können durch Definieren geändert werden tostring
und Wert von
Funktionen auf der Prototyp für Zeichenfolge bzw. Zahlenguss.
JavaScript hat Kritik dafür erhalten, wie es diese Konvertierungen implementiert, da die Komplexität der Regeln mit Inkonsistenz gehalten werden kann.[52][51] Wenn Sie beispielsweise eine Zahl zu einer Zeichenfolge hinzufügen, wird die Nummer vor der Durchführung einer Verkettung in eine Zeichenfolge gegossen. Wenn Sie jedoch eine Nummer von einer Zeichenfolge abziehen, wird die Zeichenfolge vor der Durchführung der Subtraktion auf eine Zahl gegossen.
linker Operand | Operator | Recht Operand | Ergebnis |
---|---|---|---|
[] (leeres Array) | + | [] (leeres Array) | "" " (leerer String) |
[] (leeres Array) | + | {} (leeres Objekt) | "[Objekt]" " (String) |
FALSCH (boolean) | + | [] (leeres Array) | "FALSCH" (String) |
"123" (String) | + | 1 (Nummer) | "1231" (String) |
"123" (String) | - | 1 (Nummer) | 122 (Nummer) |
"123" (String) | - | "ABC" (String) | Nan (Nummer) |
Oft auch erwähnt ist {} + []
ergebend 0
(Nummer). Das ist irreführend: die {}
wird als leerer Codeblock anstelle eines leeren Objekts interpretiert, und das leere Array wird vom verbleibenden Unarm auf eine Nummer gegossen +
Operator. Wenn Sie den Ausdruck in Klammern wickeln ({} + [])
Die lockigen Klammern werden als leeres Objekt interpretiert und das Ergebnis des Ausdrucks ist "[Objekt]" "
wie erwartet.[51]
Dynamisch
- Typisierung
- JavaScript ist dynamisch getippt Wie die meisten anderen Skriptsprachen. EIN Typ ist mit a verbunden Wert eher als ein Ausdruck. Zum Beispiel a Variable Anfänglich an eine Zahl gebunden werden kann zu a zugewiesen werden Saite.[53] JavaScript unterstützt verschiedene Möglichkeiten, um die Art von Objekten zu testen, einschließlich Ententypisierung.[54]
- Laufzeitbewertung
- JavaScript enthält an
bewerten
Funktion, mit der Anweisungen zur Laufzeit als Zeichenfolgen ausgeführt werden können.
Objektorientierung (Prototypbasierte)
Die prototypische Vererbung in JavaScript wird durch beschrieben Douglas Crockford wie:
Sie erstellen Prototypobjekte und dann ... neue Instanzen. Objekte sind in JavaScript veränderlich, sodass wir die neuen Instanzen erweitern können und ihnen neue Felder und Methoden geben. Diese können dann als Prototypen für noch neuere Objekte wirken. Wir brauchen keine Klassen, um viele ähnliche Objekte zu erstellen ... Objekte erben von Objekten. Was könnte objektorientierter sein?[55]
In JavaScript, an Objekt ist ein Assoziatives Array, erweitert mit einem Prototyp (siehe unten); Jeder Schlüssel enthält den Namen für ein Objekt Eigentumund es gibt zwei syntaktische Möglichkeiten, um einen solchen Namen anzugeben: Punktnotation (obj.x = 10
) und Klammernotation (obj ['x'] = 10
). Eine Eigenschaft kann zur Laufzeit hinzugefügt, abprallt oder gelöscht werden. Die meisten Eigenschaften eines Objekts (und jeder Eigenschaft, die zu der Prototyp -Vererbungskette eines Objekts gehört) kann mit a aufgezählt werden für in
Schleife.
- Prototypen
- JavaScript verwendet Prototypen wo viele andere objektorientierte Sprachen verwenden Klassen zum Nachlass.[56] Es ist möglich, viele klassenbasierte Funktionen mit Prototypen in JavaScript zu simulieren.[57]
- Funktionen als Objektkonstruktoren
- Funktionen doppelt als Objektkonstruktoren zusammen mit ihrer typischen Rolle. Präfixen eines Funktionsaufrufs mit Neu Erstellt eine Instanz eines Prototyps, der Eigenschaften und Methoden des Konstruktors erbt (einschließlich Eigenschaften aus dem
Objekt
Prototyp).[58] ECMascript 5 bietet dieObject.create
Methode, die eine explizite Schaffung einer Instanz ermöglichen, ohne automatisch von der zu erbenObjekt
Prototyp (ältere Umgebungen können den Prototyp zuweisenNull
).[59] Der Konstruktor des KonstruktorsPrototyp
Eigenschaft bestimmt das Objekt, das für den internen Prototyp des neuen Objekts verwendet wird. Neue Methoden können hinzugefügt werden, indem der Prototyp der als Konstruktor verwendeten Funktion geändert wird. Die integrierten Konstruktoren von JavaScript, z.Array
oderObjekt
haben auch Prototypen, die geändert werden können. Während es möglich ist, die zu ändernObjekt
Prototyp wird allgemein als schlechte Praxis angesehen, da die meisten Objekte in JavaScript Methoden und Eigenschaften von der erbenObjekt
Prototyp, und sie erwarten möglicherweise nicht, dass der Prototyp geändert wird.[60] - Funktionen als Methoden
- Im Gegensatz zu vielen objektorientierten Sprachen gibt es keine Unterscheidung zwischen einer Funktionsdefinition und a Methode Definition. Vielmehr erfolgt die Unterscheidung während der Funktionsaufruf: Wenn eine Funktion als Methode eines Objekts bezeichnet wird, ist die lokale Funktion der Funktion Dies Das Schlüsselwort ist für diesen Aufruf an dieses Objekt gebunden.
Funktional
JavaScript Funktionen sind erste Klasse; Eine Funktion wird als Objekt angesehen.[61] Als solche kann eine Funktion Eigenschaften und Methoden haben, wie z. .Anruf()
und .binden()
.[62] A verschachtelt Funktion ist eine Funktion, die in einer anderen Funktion definiert ist. Es wird jedes Mal erstellt, wenn die äußere Funktion aufgerufen wird. Zusätzlich bildet jede verschachtelte Funktion a lexikalische Schließung: das lexikalischer Bereich der äußeren Funktion (einschließlich einer konstanten, lokalen Variablen oder Argumentwert) wird Teil des internen Zustands jedes inneren Funktionsobjekts, auch nach Ausführung der äußeren Funktion.[63] JavaScript unterstützt auch Anonyme Funktionen.
Delegativ
JavaScript unterstützt implizite und explizit Delegation.
- Funktionen als Rollen (Merkmale und Mixins)
- JavaScript unterstützt nativ verschiedene funktionsbasierte Implementierungen von Rolle[64] Muster wie Züge[65][66] und Mischungen.[67] Eine solche Funktion definiert zusätzliches Verhalten um mindestens eine Methode, die an die gebunden ist
Dies
Schlüsselwort innerhalb seinesFunktion
Karosserie. Eine Rolle muss dann explizit über explizit delegiert werdenAnruf
oderanwenden
an Objekte, die zusätzliches Verhalten aufweisen müssen, das nicht über die Prototypkette geteilt wird. - Objektzusammensetzung und Vererbung
- Während explizite funktionsbasierte Delegation abdeckt Komposition In JavaScript tritt die implizite Delegation bereits jedes Mal auf, wenn die Prototypkette gegangen wird, um z. B. eine Methode zu finden, die möglicherweise mit einem Objekt in Verbindung steht, aber nicht direkt im Besitz ist. Sobald die Methode gefunden wurde, wird sie in den Kontext dieses Objekts aufgerufen. Daher Nachlass In JavaScript wird ein Delegationsautomatismus abgedeckt, der an die Prototyp -Eigenschaft von Konstruktorfunktionen gebunden ist.
Sonstig
JavaScript ist a Null-Index Sprache.
- Laufzeitumgebung
- JavaScript beruht normalerweise auf eine Laufzeitumgebung (z. B. a Webbrowser) Um Objekte und Methoden bereitzustellen, mit denen Skripte mit der Umgebung interagieren können (z. B. eine Webseite Dom). Diese Umgebungen sind Single-Gewinde. JavaScript beruht auch auf der Laufzeitumgebung, um Skripte einzubeziehen/importieren (z. B.,, Html
Elemente). Dies ist keine Sprachfunktion an sich, aber in den meisten JavaScript -Implementierungen üblich. JavaScript -Prozesse Mitteilungen von einem Warteschlange eins nach dem anderen. JavaScript ruft a Funktion mit jeder neuen Nachricht verknüpft, erstellen Sie a Rufen Sie Stack an Rahmen mit der Funktion der Funktion Argumente und Lokale Variablen. Der Anrufstapel schrumpft und wächst basierend auf den Bedürfnissen der Funktion. Wenn der Anrufstack nach Abschluss der Funktion leer ist, geht JavaScript mit der nächsten Nachricht in der Warteschlange vor. Dies nennt man die Ereignisschleife, beschrieben als "Ausführen zur Fertigstellung", da jede Nachricht vollständig verarbeitet wird, bevor die nächste Nachricht berücksichtigt wird. Die Sprache der Sprache jedoch Parallelitätsmodell beschreibt die Ereignisschleife als nicht blockierend: Programm Input-Output wird verwendet Veranstaltungen und Rückruffunktionen. Dies bedeutet beispielsweise, dass JavaScript einen Mausklick verarbeiten kann, während Sie auf eine Datenbankabfrage warten, um Informationen zurückzugeben.[68]
- Variadische Funktionen
- Eine unbestimmte Anzahl von Parametern kann an eine Funktion übergeben werden. Die Funktion kann auf sie zugreifen formale Parameter und auch durch den Einheimischen
Argumente
Objekt. Variadische Funktionen kann auch durch die Verwendung der verwendet werdenbinden
Methode.
- Array- und Objektliterale
- Wie viele Skriptsprachen, Arrays und Objekte (assoziative Arrays in anderen Sprachen) kann jeweils mit einer prägnanten Abkürzungssyntax erstellt werden. In der Tat diese Literale bilden die Grundlage der JSON Datei Format.
- Reguläre Ausdrücke
- JavaScript unterstützt auch Reguläre Ausdrücke in ähnlicher Weise wie Perl, die eine kurze und leistungsstarke Syntax für die Textmanipulation liefern, die anspruchsvoller ist als die integrierten Stringfunktionen.[69]
- Versprechen und asynchronisiert/warten
- JavaScript unterstützt Versprechen und Asynchron/wartet zum Umgang mit asynchronen Operationen. Ein integriertes Versprechensobjekt bietet Funktionen für Versprechen und Zusammenarbeit mit dem eventuellen Ergebnis einer asynchronen Aktion. Kürzlich wurden Kombinatormethoden in der JavaScript -Spezifikation eingeführt, mit der Entwickler mehrere JavaScript -Versprechen und Operationen basierend auf verschiedenen Szenarien kombinieren können. Die eingeführten Methoden sind: Versprechen.Race, Versprechen.All, Versprechen.Allsettled and Promise.any. Async/wartet ermöglicht es, dass eine asynchrone, nicht blockierende Funktion auf ähnliche Weise einer gewöhnlichen synchronen Funktion strukturiert wird. Asynchroner, nicht blockierender Code kann mit minimalem Overhead geschrieben werden, ähnlich wie herkömmlicher synchroner, blockierender Code.
Herstellerspezifische Erweiterungen
Historisch gesehen einige JavaScript -Motoren unterstützte diese nicht standardmäßigen Funktionen:
- bedingt
Fang
Klauseln (wie Java) - Array -Verständnisse und Generatorausdrücke (wie Python)
- präzise Funktionsausdrücke (
Funktion (args) expr.
; Diese experimentelle Syntax -Vorhersagefunktionen) - ECMascript für XML (E4X), eine Erweiterung, die ECMAScript native XML -Unterstützung hinzufügt (in Firefox seit Version 21 nicht unterstützt[70])
Syntax
Einfache Beispiele
Variablen in JavaScript kann mit beiden definiert werden var
,[71] Lassen
[72] oder Const
[73] Schlüsselwörter. Ohne Schlüsselwörter definierte Variablen werden im globalen Bereich definiert.
// deklariert eine funktionsübergreifende Variable mit dem Namen "x" und weist die implizit die zu // Sonderwert `undefiniert". Variablen ohne Wert sind automatisch // auf undefiniert einstellen. var x; // Variablen können manuell auf "undefiniert" eingestellt werden var x2 = nicht definiert; // deklariert eine blockscopierte Variable mit dem Namen "y" und setzt sie implizit auf // `undefined`. Das Schlüsselwort "let" wurde in ECMascript 2015 eingeführt. Lassen y; // deklariert eine blockscopierte, unresträuliche Variable mit dem Namen "Z" und setzt sie auf // eine Streicherliteral. Das Schlüsselwort "const" wurde ebenfalls in ECMascript 2015 eingeführt. // und muss explizit zugewiesen werden. // Das Schlüsselwort `const` bedeutet konstant, daher kann die Variable nicht neu zugewiesen werden // wie der Wert `constant` ist. Const z = "Dieser Wert kann nicht neu zugewiesen werden!"; // deklariert eine globale Variable und weist 3. Dies wird allgemein berücksichtigt // schlechte Übung und nicht funktioniert, wenn der strenge Modus eingeschaltet ist. t = 3; // deklariert eine Variable namens "mynumber" und weist eine Zahlenliteral (den Wert "zu // `2`) dazu. Lassen meine Nummer = 2; // Neuzuweisungen "mynumber", und setzt es einem String -Literal (der Wert "" foo ""). // JavaScript ist eine dynamisch typische Sprache, das ist also legal. meine Nummer = "Foo";
Beachten Sie das Kommentare Im obigen Beispiel waren alle zwei vorausging zwei vor Schrägstriche vorwärts.
Es gibt keinen Einbau Input-Output Funktionalität in JavaScript, stattdessen wird sie von der Laufzeitumgebung bereitgestellt. In der ECMascript -Spezifikation in Ausgabe 5.1 wird erwähnt, dass "in dieser Spezifikation keine Bestimmungen für die Eingabe externer Daten oder Ausgabe von berechneten Ergebnissen vorhanden sind".[74] Die meisten Laufzeitumgebungen haben jedoch eine Konsole
Objekt, mit dem die Ausgabe drucken kann.[75] Hier ist ein Minimalist Hallo Weltprogramm In JavaScript in einer Laufzeitumgebung mit einem Konsolenobjekt:
Konsole.Protokoll("Hallo Welt!");
In HTML -Dokumenten ist für eine Ausgabe ein Programm wie dieses erforderlich:
// Textknoten können mit der Methode "Schreiben" erstellt werden. // Dies ist verpönt, da es das Dokument überschreiben kann, wenn das Dokument vollständig geladen ist. dokumentieren.schreiben("Foo"); // Elemente können auch gemacht werden. Zunächst müssen sie im DOM erstellt werden. Const Myelem = dokumentieren.CreateLement('Spanne'); // Attribute wie Klassen und die ID können ebenfalls festgelegt werden Myelem.Classlist.hinzufügen("Foo"); Myelem.Ich würde = 'Bar'; // Für hier sieht das Attribut so aus: <span data-attr = "baz"> </span> Myelem.SetAttribute('Data-atrr', "Baz"); // Gehen Sie es schließlich als untergeordnetes Element an die <body> im HTML an dokumentieren.Karosserie.appendChild(Myelem); // Elemente können mit QuerySelector für ein Element oder QuerySelectorAll für mehrere Elemente, die mit Foreach geschleudert werden können dokumentieren.QuerySelector('.Klasse'); dokumentieren.QuerySelector('#Ich würde'); dokumentieren.QuerySelector("[data-other]"); dokumentieren.QuerySelectorall('.mehrere');
Eine einfache rekursiv Funktion zur Berechnung der Berechnung der Fakultät von a natürliche Zahl:
Funktion Fakultät(n) { // das Argument für Legitimität überprüfen. Faktorial ist für positive Ganzzahlen definiert. wenn (isnan(n)) { Konsole.Error("Nicht numerisches Argument nicht erlaubt."); Rückkehr Nan; // der besondere Wert: nicht eine Zahl } wenn (n === 0) Rückkehr 1; // 0! = 1 wenn ( n < 0) Rückkehr nicht definiert; // Faktor für negative Zahlen ist nicht definiert. wenn (n % 1) { Konsole.warnen(`$ {n} wird auf die engste Ganzzahl gerundet. Für Nichtintergas überlegen Sie stattdessen die Gamma-Funktion. "); n = Mathematik.runden(n); } // Die oben genannten Überprüfungen müssen in der Rekursion nicht wiederholt werden, wodurch der tatsächliche rekursive Teil separat unten definiert wird. // Die folgende Zeile ist ein Funktionsausdruck, um das Faktor rekursiv zu berechnen. Es verwendet die in ES6 eingeführte Pfeilsyntax. Const rekursiv_Compute = a => a > 1 ? a * rekursiv_Compute(a - 1) : 1; // Beachten Sie die Verwendung des ternären Operators '?'. Rückkehr rekursiv_Compute(n); } Fakultät(3); // Gibt 6 zurück
Ein Anonyme Funktion (oder lambda):
Lassen Zähler = Funktion() { Lassen zählen = 0; Rückkehr Funktion() { Rückkehr ++zählen; } }; Lassen x = Zähler(); x(); // Gibt 1 zurück x(); // Gibt 2 zurück x(); // Gibt 3 zurück
Dieses Beispiel zeigt, dass in JavaScript, Funktionsschließungen Erfassen Sie ihre nicht lokalen Variablen durch Referenz.
Pfeilfunktionen wurden zuerst eingeführt in 6. Ausgabe - ECMascript 2015. Sie verkürzen die Syntax für das Schreiben von Funktionen in JavaScript. Pfeilfunktionen sind anonym, daher ist eine Variable erforderlich, um sie zu verweisen, um sie nach ihrer Erstellung aufzurufen, es sei denn, sie werden von Klammern umgeben und sofort ausgeführt.
Beispiel für die Pfeilfunktion:
// Pfeilfunktionen lassen uns das Schlüsselwort "Funktion" weglassen. // Hier zeigt `long_example` auf einen anonymen Funktionswert. Const long_example = (input1, input2) => { Konsole.Protokoll("Hallo Welt!"); Const Ausgang = input1 + input2; Rückkehr Ausgang; }; // Wenn es keine Zahnspangen gibt, gibt die Pfeilfunktion einfach den Ausdruck zurück // Also hier ist es (input1 + input2) Const Short_example = (input1, input2) => input1 + input2; long_example(2, 3); // Drucke "Hallo, Welt!" und kehrt 5 zurück Short_example(2, 5); // Gibt 7 zurück // Wenn eine Pfeilfunktion nur einen Parameter hat, können die Klammern entfernt werden. Const no_parenthesen = Eingang => Eingang + 2; no_parenthesen(3); // Gibt 5 zurück // Eine Pfeilfunktion kann wie andere Funktionsdefinitionen in derselben Anweisung wie sie erstellt werden. // Dies ist nützlich, wenn Bibliotheken geschrieben werden, um das Ausfüllen des globalen Umfangs und für Schließungen zu vermeiden. var drei = ((a, b) => a + b) (1, 2); Const generate_multiplier_function = a => (b => isnan(b) || !b ? a : a*=b); Const Fünf_multiples = generate_multiplier_function(5); // Das mitgelieferte Argument "Samen" der Ausdruck und wird von a. Fünf_multiples(1); // Gibt 5 zurück Fünf_multiples(3); // Gibt 15 zurück Fünf_multiples(4); // gibt 60 zurück
In JavaScript, Objekte werden genauso erstellt wie Funktionen; Dies ist als a bekannt Funktionsobjekt.
Objektbeispiel:
Funktion Ball(r) { Dies.Radius = r; // Das "R" -Argument ist lokal zum Ballobjekt Dies.Bereich = Mathematik.PI * (r ** 2); // Klammern tun nichts anderes als klären // Objekte können Funktionen enthalten ("Methode") Dies.Show = Funktion() { Drawcircle(Dies.Radius); // verweist auf eine andere Funktion (die einen Kreis zeichnet) }; } Lassen mein Ball = Neu Ball(5); // schafft eine neue Instanz des Ballobjekts mit Radius 5 mein Ball.Radius++; // Objekteigenschaften können normalerweise von außen geändert werden mein Ball.Show(); // Verwenden der ererbten "Show" -Funktion
Variadische Funktion Demonstration (Argumente
ist ein besonderes Variable):[76]
Funktion Summe() { Lassen x = 0; zum (Lassen i = 0; i < Argumente.Länge; ++i) x += Argumente[i]; Rückkehr x; } Summe(1, 2); // Gibt 3 zurück Summe(1, 2, 3); // Gibt 6 zurück // ab ES6 mit dem Restbetreiber. Funktion Summe(...Args) { Rückkehr Args.reduzieren((a,b) => a+b); } Summe(1, 2); // Gibt 3 zurück Summe(1, 2, 3); // Gibt 6 zurück
Sofortige Ausdrücke von Funktionsausdrücken werden oft verwendet, um Schließungen zu schaffen. Schließungen ermöglichen das Sammeln von Eigenschaften und Methoden in einem Namespace und das private Machen von ihnen:
Lassen Zähler = (Funktion() { Lassen i = 0; // Privateigentum Rückkehr { // öffentliche Methoden erhalten: Funktion() { Alarm(i); }, einstellen: Funktion(Wert) { i = Wert; }, Zuwachs: Funktion() { Alarm(++i); } }; }) (); // Modul Zähler.erhalten(); // zeigt 0 Zähler.einstellen(6); Zähler.Zuwachs(); // zeigt 7 Zähler.Zuwachs(); // zeigt 8
JavaScript kann aus Modulen exportieren und importieren:[77]
Exportbeispiel:
/ * myModule.js */ // Diese Funktion bleibt privat, da sie nicht exportiert wird Lassen Summe = (a, b) => { Rückkehr a + b; } // Variablen exportieren Export Lassen Name = "Alice"; Export Lassen das Alter = 23; // benannte Funktionen exportieren Export Funktion hinzufügen(Num1, Num2) { Rückkehr Num1 + Num2; } // Klasse exportieren Export Klasse Multiplikation { Konstrukteur(Num1, Num2) { Dies.Num1 = Num1; Dies.Num2 = Num2; } hinzufügen() { Rückkehr Summe(Dies.Num1, Dies.Num2); } }
Beispiel importieren:
// eine Eigenschaft importieren importieren { hinzufügen } aus './mymodule.js' '; Konsole.Protokoll(hinzufügen(1, 2)); //> 3 // Mehrere Eigenschaften importieren importieren { Name, das Alter } aus './mymodule.js' '; Konsole.Protokoll(Name, das Alter); //> "Alice", 23 // Importieren Sie alle Eigenschaften aus einem Modul importieren * aus './module.js' ' Konsole.Protokoll(Name, das Alter); //> "Alice", 23 Konsole.Protokoll(hinzufügen(1,2)); //> 3
Fortgeschritteneres Beispiel
Dieser Beispielcode zeigt verschiedene JavaScript -Funktionen an.
/ * Findet das niedrigste gemeinsame Multiple (LCM) von zwei Zahlen */ Funktion LCMCalculator(x, y) { // Konstruktorfunktion wenn (isnan(x*y)) Wurf Neu Typeerror("Nicht numerische Argumente nicht erlaubt."); Const Checkint = Funktion(x) { // innere Funktion wenn (x % 1 ! == 0) Wurf Neu Typeerror(x + "Ist keine Ganzzahl"); Rückkehr x; }; Dies.a = Checkint(x) // semicolons ^^^^ sind optional, eine neue Linie ist genug Dies.b = Checkint(y); } // Der Prototyp der von einem Konstruktor erstellten Objektinstanzen ist // Die "Prototypen" des Konstruktors. LCMCalculator.Prototyp = { // Objekt wörtlich Konstrukteur: LCMCalculator, // Bei der Neuzuweisung eines Prototyps die Konstruktoreigenschaft entsprechend festlegen GCD: Funktion() { // Methode, die den größten gemeinsamen Divisor berechnet // Euklidischer Algorithmus: Lassen a = Mathematik.Abs(Dies.a), b = Mathematik.Abs(Dies.b), t; wenn (a < b) { // Variablen tauschen // t = b; B = a; a = t; [a, b] = [b, a]; // Tauschen Sie mit der Destructuring -Zuordnung (ES6) aus } während (b ! == 0) { t = b; b = a % b; a = t; } // muss nur einmal GCD berechnen, also "neu definieren" diese Methode neu. // (tatsächlich nicht neu definiert - es ist auf der Instanz selbst definiert, // so dass dies.gcd auf diese "Neudefinition" anstelle von lcmcalculator.prototype.gcd bezieht. // Beachten Sie, dass dies zu einem falschen Ergebnis führt, wenn die Mitglieder des LCMCalculator -Objekts "A" und/oder "B" danach geändert werden.) // Auch 'gcd' === "gcd", this ['gcd'] === this.gcd Dies['GCD'] = Funktion() { Rückkehr a; }; Rückkehr a; }, // Objekteigenschaftsnamen können durch Zeichenfolgen angegeben werden, die durch Double (") oder einzelne (') Zitate begrenzt sind. "LCM": Funktion() { // Variablennamen kollidieren nicht mit Objekteigenschaften, z. B. | lcm | ist nicht | this.lcm |. // nicht | this.a*this.b | Um FP -Präzisionsprobleme zu vermeiden Lassen LCM = Dies.a / Dies.GCD() * Dies.b; // muss nur einmal LCM berechnen, also "neu definieren" diese Methode neu. Dies.LCM = Funktion() { Rückkehr LCM; }; Rückkehr LCM; }, // Methoden können auch mit der ES6 -Syntax deklariert werden tostring() { // Verwenden Sie beide ES6 -Template -Literale und den (+) Operator, um Werte zu verkettet Rückkehr `Lcmcalculator: a = $ {Dies.a}, b = ` + Dies.b; } }; // Generische Ausgangsfunktion definieren; Diese Implementierung funktioniert nur für Webbrowser Funktion Ausgang(x) { dokumentieren.Karosserie.appendChild(dokumentieren.CreateTextNode(x)); dokumentieren.Karosserie.appendChild(dokumentieren.CreateLement('br')); } // HINWEIS: Array's MAP () und foreach () sind in JavaScript 1.6 definiert. // Sie werden hier verwendet, um die inhärente funktionale Natur von JavaScript zu demonstrieren. [ [25, 55], [21, 56], [22, 58], [28, 56] ].Karte(Funktion(Paar) { // Array Literal + Mapping -Funktion Rückkehr Neu LCMCalculator(Paar[0], Paar[1]); }).Sortieren((a, b) => a.LCM() - b.LCM()) // mit dieser vergleichenden Funktion sortieren; => ist eine Kurzform einer Funktion, die als "Pfeilfunktion" bezeichnet wird .für jeden(Printresult); Funktion Printresult(obj) { Ausgang(obj + ", gcd =" + obj.GCD() + ", lcm =" + obj.LCM()); }
Die folgende Ausgabe sollte im Browserfenster angezeigt werden.
Lcmcalculator: a = 28, b = 56, gcd = 28, lcm = 56 lcmcalculator: a = 21, b = 56, gcd = 7, lcm = 168 lcmcalculator: a = 25, b = 55, gcd = 5, lcm = 275 lcmcalculator: a = 22, b = 58, gcd = 2, lcm = 638
Sicherheit
JavaScript und die Dom Bieten Sie böswilligen Autoren das Potenzial, Skripte zu liefern, die auf einem Client -Computer über das Web ausgeführt werden können. Browserautoren minimieren dieses Risiko mit zwei Einschränkungen. Erstens werden Skripte in a ausgeführt Sandkasten in dem sie nur Web-bezogene Aktionen ausführen können, nicht allgemeine Programmieraufgaben wie das Erstellen von Dateien. Zweitens werden Skripte durch die eingeschränkt gleichorientierte Politik: Skripte von einer Website haben keinen Zugriff auf Informationen wie Benutzernamen, Passwörter oder Cookies, die an eine andere Website gesendet werden. Die meisten JavaScript-bezogenen Sicherheitsfehler sind Verstöße gegen die gleiche Ursprungsrichtlinie oder die Sandbox.
Es gibt Untergruppen von allgemeinem JavaScript - Adsafe, Secure ECMascript (SES) -, das ein höheres Sicherheitsniveau bietet, insbesondere für Code, die von Dritten (z. B. Anzeigen) erstellt wurden.[78][79] Das Clossure-Toolkit ist ein weiteres Projekt zur sicheren Einbettung und Isolierung von JavaScript und HTML-Drittanbieter.[80]
Inhaltssicherheitsrichtlinie ist die wichtigste Methode, um sicherzustellen, dass nur vertrauenswürdiger Code auf einer Webseite ausgeführt wird.
Schwachstellen für Cross-Site
Ein häufiges JavaScript-bezogenes Sicherheitsproblem ist Cross-Site-Scripting (XSS), eine Verletzung der gleichorientierte Politik. XSS -Schwachstellen treten auf, wenn ein Angreifer eine Zielwebsite wie eine Online -Banking -Website verursachen kann, um ein böswilliges Skript in die Webseite aufzunehmen, die einem Opfer präsentiert wird. Das Skript in diesem Beispiel kann dann mit den Berechtigungen des Opfers auf die Bankenanwendung zugreifen, wobei möglicherweise geheime Informationen offengelegt oder Geld ohne Genehmigung des Opfers übertragen werden. Eine Lösung für XSS -Schwachstellen ist die Verwendung Html entkommen Wann immer es nicht vertrauenswürdige Daten anzeigen.
Einige Browser enthalten teilweise Schutz vor reflektiert XSS -Angriffe, bei denen der Angreifer eine URL einschließlich böswilliger Skript anbietet. Selbst Benutzer dieser Browser sind jedoch anfällig für andere XSS -Angriffe, beispielsweise für solche, bei denen der böswillige Code in einer Datenbank gespeichert wird. Nur korrektes Design von Webanwendungen auf der serverseitigen kann XSS vollständig verhindern.
XSS -Schwachstellen können auch aufgrund von Implementierungsfehlern durch Browserautoren auftreten.[81]
Eine weitere Verletzlichkeit im Cross-Standort ist Cross-Site-Anfragefälschung (CSRF). In CSRF tritt der Code auf der Site eines Angreifers den Browser des Opfers dazu, Aktionen zu ergreifen, die der Benutzer nicht an einer Zielstelle beabsichtigt hatte (z. B. Geldübertragung bei einer Bank). Wenn sich Zielseiten ausschließlich auf Cookies für die Anfrage -Authentifizierung beruhen, können Anfragen, die aus dem Code auf der Site des Angreifers stammen, dieselben gültigen Anmeldeinformationen des einleitenden Benutzers tragen. Im Allgemeinen besteht die Lösung für CSRF darin, einen Authentifizierungswert in einem versteckten Formfeld und nicht nur in den Cookies zu erfordern, um eine Anfrage zu authentifizieren, die möglicherweise dauerhafte Auswirkungen hat. Das Überprüfen des HTTP -Referrer -Headers kann ebenfalls helfen.
"JavaScript Hijacking" ist eine Art CSRF -Angriff, bei dem a Tag auf der Website eines Angreifers nutzt eine Seite auf der Website des Opfers, auf der private Informationen wie z. JSON oder JavaScript. Mögliche Lösungen umfassen:
- Erfordern eines Authentifizierungs -Tokens in der POST und ERHALTEN Parameter für jede Antwort, die private Informationen zurückgibt.
Verlegtes Vertrauen in den Kunden
Entwickler von Kunden-Server-Anwendungen müssen erkennen, dass nicht vertrauenswürdige Kunden unter der Kontrolle der Angreifer stehen. Der Anwendungsautor kann nicht davon ausgehen, dass sein JavaScript -Code wie beabsichtigt (oder überhaupt) ausgeführt wird, da geheime in den Code eingebettete geheime eingebettete Gegner extrahiert werden könnte. Einige Implikationen sind:
- Autoren von Website -Autoren können nicht perfekt verbergen, wie ihr JavaScript funktioniert, da der RAW -Quellcode an den Client gesendet werden muss. Der Code kann sein verschleiert, aber die Verschleierung kann umgekehrt gestaltet werden.
- Die Validierung des JavaScript -Formulars bietet Benutzern nur Komfort, nicht die Sicherheit. Wenn eine Site überprüft, ob der Benutzer seinen Servicebedingungen zustimmt oder ungültige Zeichen aus Feldern filtert, die nur Zahlen enthalten sollten, muss dies nicht nur auf dem Server und nicht nur auf dem Client möglich sein.
- Skripte können selektiv deaktiviert werden, sodass JavaScript nicht darauf angewiesen werden kann, Vorgänge wie das rechte Klicken auf ein Bild zu verhindern, um es zu speichern.[82]
- Es wird als sehr schlechte Praxis angesehen, vertrauliche Informationen wie Passwörter in JavaScript einzubetten, da sie von einem Angreifer extrahiert werden können.[83]
Verlegtes Vertrauen in Entwickler
Paketverwaltungssysteme wie z. NPM und Bower sind bei JavaScript -Entwicklern beliebt. Solche Systeme ermöglichen es einem Entwickler, die Abhängigkeiten seines Programms von den Programmbibliotheken anderer Entwickler einfach zu verwalten. Entwickler vertrauen darauf, dass die Betreuer der Bibliotheken sie sicher und auf dem neuesten Stand halten, aber das ist nicht immer der Fall. Aufgrund dieses blinden Vertrauens ist eine Sicherheitsanfälligkeit entstanden. Verlassene Bibliotheken können neue Releases haben, die in allen Programmen, die auf die Bibliotheken beruhen, Fehler oder Schwachstellen verursachen. Umgekehrt kann eine Bibliothek mit bekannten Schwachstellen in freier Wildbahn nicht einverstanden sein. In einer Studie, die über eine Stichprobe von 133.000 Websites nachgeschlagen wurde, stellten die Forscher fest, dass 37% der Websites eine Bibliothek mit mindestens einer bekannten Verwundbarkeit enthielten.[84] "Die mediane Verzögerung zwischen der ältesten Bibliotheksversion, die auf jeder Website verwendet wird, und der neuesten verfügbaren Version dieser Bibliothek beträgt 1.177 Tage in Alexa, und die Entwicklung einiger Bibliotheken, die noch im aktiven Gebrauch sind, wurden vor Jahren eingestellt."[84] Eine andere Möglichkeit besteht darin, dass der Betreuer einer Bibliothek die Bibliothek vollständig entfernen kann. Dies geschah im März 2016, als Azer Koçulu sein Repository von NPM entfernte. Dies führte dazu, dass Zehntausende von Programmen und Websites je nach seinen Bibliotheken brechen.[85][86]
Browser- und Plugin -Codierungsfehler
JavaScript bietet eine Schnittstelle zu einer Vielzahl von Browserfunktionen, von denen einige möglicherweise Fehler aufweisen können Pufferüberläufe. Diese Fehler können Angreifer ermöglichen, Skripte zu schreiben, die jeden Code ausführen, den sie im Benutzer des Benutzers wünschen. Dieser Code ist keineswegs auf eine andere JavaScript -Anwendung beschränkt. Beispielsweise kann ein Puffer -Exploit es einem Angreifer ermöglichen, Zugriff auf das Betriebssystem zu erhalten API mit Superuser -Privilegien.
Diese Mängel haben große Browser, einschließlich Firefox, betroffen.[87] Internet Explorer,[88] und Safari.[89]
Plugins, wie Videostiere, Adobe Flashund die breite Palette von ActiveX Die standardmäßig in Microsoft Internet Explorer aktivierten Steuerelemente können auch Fehler über JavaScript ausnutzen (solche Fehler wurden in der Vergangenheit ausgenutzt).[90][91]
In Windows Vista hat Microsoft versucht, die Risiken von Fehler wie Pufferüberläufen einzudämmen, indem der Internet Explorer -Prozess mit begrenzten Berechtigungen ausgeführt wird.[92] Google Chrome In ähnlicher Weise beschränkt seine Seite die Renderer auf ihre eigenen. "Sandkasten".
Sandbox -Implementierungsfehler
Webbrowser können JavaScript außerhalb der Sandbox ausführen, wobei die Berechtigungen erforderlich sind, um beispielsweise Dateien zu erstellen oder zu löschen. Solche Privilegien sollen nicht dem Code aus dem Web gewährt werden.
JavaScript aus dem Web fälschlicherweise die Berechtigung zu gewähren, hat eine Rolle bei Schwachstellen beider Internet Explorer gespielt[93] und Firefox.[94] In Windows XP Service Pack 2 hat Microsoft die Berechtigungen von Jscript im Internet Explorer herabgestuft.[95]
Microsoft Windows Ermöglicht JavaScript-Quelldateien auf der Festplatte eines Computers als allgemeine, nicht sandboxierte Programme (siehe: Windows -Skript -Host). Dies macht JavaScript (wie Vbscript) ein theoretisch lebensfähiger Vektor für a Trojanisches PferdObwohl JavaScript -Trojaner in der Praxis ungewöhnlich sind.[96][Fehlgeschlagene Überprüfung]
Hardware -Schwachstellen
Im Jahr 2015 eine Implementierung von JavaScript-basierten Proof-of-Concept-Implementierung von a RowHammer Der Angriff wurde in einem Papier von Sicherheitsforschern beschrieben.[97][98][99][100]
Im Jahr 2017 wurde ein auf JavaScript-basierter Angriff über Browser gezeigt, der umgehen könnte ASLR. Es heißt "Aslr⊕cache" oder ANC.[101][102]
Im Jahr 2018 gab das Papier, das die angekündigt hat Gespenst Zu den Angriffen gegen die spekulative Ausführung in Intel und anderen Prozessoren gehörten eine JavaScript -Implementierung.[103]
Entwicklungswerkzeuge
Wichtige Werkzeuge haben sich mit der Sprache entwickelt.
- Jeder große Webbrowser hat integriert Webentwicklungstools, einschließlich eines JavaScripts Debugger.
- Statische Programmanalyse Werkzeuge wie z. Eslint und JSlintScannen Sie den JavaScript -Code für die Konformität mit einer Reihe von Standards und Richtlinien.
- Einige Browser haben eingebaut Profiler. Es wurden auch eigenständige Profiling-Bibliotheken erstellt wie Benchmark.js und Jsbench.[104][105]
- Viele Textredakteure Halten Sie die Syntax -Unterstützung für den JavaScript -Code hervor.
Verwandte Technologien
Java
Ein häufiges Missverständnis ist, dass JavaScript das gleiche ist wie Java. Beide haben in der Tat eine C-ähnliche Syntax (die C-Sprache ist ihre unmittelbarste gemeinsame Vorfahren). Sie sind auch normalerweise Sandbox (Wenn in einem Browser verwendet wird) und JavaScript wurde mit Blick auf die Syntax und die Standardbibliothek von Java entworfen. Insbesondere alle Java -Schlüsselwörter wurden in Original JavaScript, JavaScripts Standardbibliothek reserviert, folgt Javas Namenskonventionen und JavaScripts Math
und Date
Objekte basieren auf Klassen von Java 1.0.[106]
Java und JavaScript erschienen beide zuerst 1995, aber Java wurde von entwickelt von James Gosling von Sun Microsystems und JavaScript von Brendan Eich von Netscape Communications.
Die Unterschiede zwischen den beiden Sprachen sind deutlicher als ihre Ähnlichkeiten. Java hat statische Typisierung, während JavaScripts Tippen ist dynamisch. Java wird aus kompilierten Bytecode geladen, während JavaScript als menschlich-lesbarer Quellcode geladen wird. Javas Objekte sind Klassenbasierte, während JavaScripts sind Prototypbasiert. Schließlich unterstützte Java die funktionale Programmierung erst Java 8, während JavaScript von Anfang an von Anfang an beeinflusst wurde. Planen.
JSON
JSONoder JavaScript-Objektnotation ist ein allgemeines Datenaustauschformat, das als Teilmenge der Objektliteral-Syntax von JavaScript definiert ist.
WebAssembly
Seit 2017 haben Webbrowser unterstützt WebAssembly, ein binäres Format, das a ermöglicht JavaScript -Engine leistungskritische Teile von leistungskritischer Teile ausführen Website Skripte nahe der nativen Geschwindigkeit.[107] Der WebAssembly -Code wird im selben ausgeführt Sandkasten als regulärer JavaScript -Code.
ASM.JS ist eine Untergruppe von JavaScript, die als Vorläufer der WebAssembly diente.[108]
Transpiler
JavaScript ist die dominierende clientseitige Sprache des Webs, und viele Websites sind skript-haavy. Daher Transpiler wurden erstellt, um Code in anderen Sprachen umzuwandeln, was den Entwicklungsprozess unterstützen kann.[38]
Verweise
- ^ a b Pressemitteilung Ankündigung von JavaScript, "Netscape und Sun geben JavaScript an", PR Newswire, 4. Dezember 1995
- ^ "ECMAScript® 2021 Sprachspezifikation". Juni 2021. Abgerufen 27. Juli 2021.
- ^ https://tc39.es/ecma262/; Abgerufen: 27. Juli 2021; Veröffentlichungsdatum: 22. Juli 2021.
- ^ "NodeJS/Knoten-EPS". GitHub. Archiviert vom Original am 2020-08-29. Abgerufen 2018-07-05.
- ^ a b Seibel, Peter (16. September 2009). Codierer bei der Arbeit: Überlegungen zum Programm der Programmierung. ISBN 9781430219484. Archiviert vom Original am 24. Dezember 2020. Abgerufen 25. Dezember, 2018.
Eich: Die unmittelbare Sorge bei Netscape war, dass es wie Java aussehen muss.
- ^ a b c d e "Kapitel 4. Wie JavaScript erstellt wurde". Redenjs.com. Archiviert vom Original am 2020-02-27. Abgerufen 2017-11-21.
- ^ "Popularität - Brendan Eich".
- ^ "Brendan Eich: Eine Einführung in JavaScript, JSConf 2010". Youtube. p. 22 m. Archiviert vom Original am 29. August 2020. Abgerufen 25. November, 2019.
Eich: "Funktion", acht Briefe, ich wurde von awk beeinflusst.
- ^ Eich, Brendan (1998). "Vorwort". Im Goodman, Danny (ed.). JavaScript -Bibel (3. Aufl.). John Wiley & Sons. ISBN 0-7645-3188-3. Lccn 97078208. OCLC 38888873. Ol 712205m.
- ^ "JavaScript". Dictionary.com. 2016-04-27. Archiviert vom Original am 9. August 2021. Abgerufen 9. August, 2021.
- ^ Flanagan, David (18. April 2011). JavaScript: Der endgültige Handbuch. Peking; Farnham: O'Reilly. p. 1. ISBN 978-1-4493-9385-4. OCLC 686709345.
JavaScript ist Teil der Triade von Technologien, die alle Webentwickler lernen müssen: HTML, um den Inhalt von Webseiten, CSS zu spezifizieren, um die Präsentation von Webseiten anzugeben, und JavaScript, um das Verhalten von Webseiten anzugeben.
- ^ a b "Verwendungsstatistik von JavaScript als clientseitige Programmiersprache auf Websites". w3techs.com. 2021-04-09. Archiviert vom Original am 2022-02-13. Abgerufen 2021-04-09.
- ^ a b c d "Nutzungsstatistik von JavaScript -Bibliotheken für Websites". w3techs.com. Archiviert vom Original am 2012-05-26. Abgerufen 2021-04-09.
- ^ "ECMAScript® 2020 Sprachspezifikation". Archiviert vom Original am 2020-05-08. Abgerufen 2020-05-08.
- ^ "Bloomberg Game Changers: Marc Andreessen". Bloomberg. Bloomberg. 17. März 2011. Archiviert Aus dem Original am 16. Mai 2012. Abgerufen 7. Dezember, 2011.
- ^ Enzer, Larry (31. August 2018). "Die Entwicklung der Webbrowser". Monmouth Webentwickler. Archiviert von das Original am 31. August 2018. Abgerufen 31. August, 2018.
- ^ Dickerson, Gordon (31. August 2018). "Erfahren Sie die Geschichte der Webbrowser". WashingtonIndependent.com. Abgerufen 31. August, 2018.
- ^ "Techvision: Innovatoren des Netzes: Brendan Eich und JavaScript". Archiviert von das Original Am 8. Februar 2008.
- ^ Fin JS (17. Juni 2016), Brendan Eich - CEO von Brave, archiviert Aus dem Original am 10. Februar 2019, abgerufen 7. Februar, 2018
- ^ a b "Kapitel 5. Standardisierung: ECMascript". Redenjs.com. Archiviert von das Original am 1. November 2021. Abgerufen 1. November 2021.
- ^ a b Champeon, Steve (6. April 2001). "JavaScript, wie sind wir hierher gekommen?". oreilly.com. Archiviert von das Original am 19. Juli 2016. Abgerufen 16. Juli, 2016.
- ^ "Microsoft Internet Explorer 3.0 Beta jetzt verfügbar". microsoft.com. Microsoft. 29. Mai 1996. Archiviert vom Original am 24. November 2020. Abgerufen 16. Juli, 2016.
- ^ McCracken, Harry (16. September 2010). "Die unerwünschte Rückkehr von" Best gesehen mit Internet Explorer "". Technologizer.com. Archiviert Aus dem Original am 23. Juni 2018. Abgerufen 16. Juli, 2016.
- ^ Baker, Loren (24. November 2004). "Der Marktanteil von Mozilla Firefox Internetbrowser erhöht sich auf 7,4%". Suchmaschinenjournal. Archiviert vom Original am 7. Mai 2021. Abgerufen 8. Mai, 2021.
- ^ Weber, Tim (9. Mai 2005). "Der Angriff auf den Software -Riesen Microsoft". BBC News. Archiviert von das Original am 25. September 2017.
- ^ "Big Browser -Vergleichstest: Internet Explorer gegen Firefox, Opera, Safari und Chrome". PC -Spiele Hardware. Computermedien ag. 3. Juli 2009. Archiviert Aus dem Original am 2. Mai 2012. Abgerufen 28. Juni, 2010.
- ^ Purdy, Kevin (11. Juni 2009). "Lifehacker -Geschwindigkeitstests: Safari 4, Chrome 2". Lifehacker. Archiviert vom Original am 14. April 2021. Abgerufen 8. Mai, 2021.
- ^ "Tracemonkey: JavaScript Lightspeed, Brendan Eichs Blog". Archiviert Aus dem Original am 4. Dezember 2015. Abgerufen 22. Juli, 2020.
- ^ "Mozilla fragt: 'Sind wir schon schnell?'". Verdrahtet. Archiviert Aus dem Original am 22. Juni 2018. Abgerufen 18. Januar, 2019.
- ^ "ECMascript 6: Neue Funktionen: Übersicht und Vergleich". ES6-features.org. Archiviert Aus dem Original am 18. März 2018. Abgerufen 19. März, 2018.
- ^ Professioneller Node.js: Erstellen von javascript -basierter skalierbarer Software Archiviert 2017-03-24 bei der Wayback -Maschine, John Wiley & Sons, 01. Oktober 2012
- ^ Sams lehrt sich in 24 Stunden Node.js Archiviert 2017-03-23 bei der Wayback -Maschine, Sams Publishing, 05-Sep-2012
- ^ Lawton, George (19. Juli 2018). "Die geheime Geschichte hinter dem Erfolg von NPM und Knoten". Theserverside. Archiviert vom Original am 2. August 2021. Abgerufen 2. August 2021.
- ^ Brown, Paul (13. Januar 2017). "Zustand der Union: NPM". Linux.com. Archiviert vom Original am 2. August 2021. Abgerufen 2. August 2021.
- ^ a b Branscombe, Mary (2016-05-04). "JavaScript -Standard wechselt zum jährlichen Veröffentlichungsplan. Hier ist das, was für ES16 neu ist.". Der neue Stapel. Archiviert vom Original am 2021-01-16. Abgerufen 2021-01-15.
- ^ "Der TC39 -Prozess". Tc39.es. ECMA International. Archiviert vom Original am 2021-02-07. Abgerufen 2021-01-15.
- ^ "ECMascript -Vorschläge". TC39. Archiviert vom Original am 2020-12-04. Abgerufen 2021-01-15.
- ^ a b Ashkenas, Jeremy. "Liste der Sprachen, die zu JS kompilieren". GitHub. Archiviert vom Original am 31. Januar 2020. Abgerufen 6. Februar, 2020.
- ^ "US -Marken -Serie Nr. 75026640". Uspto.gov. US -amerikanisches Patent- und Markenbüro. 1997-05-06. Archiviert vom Original am 2021-07-13. Abgerufen 2021-05-08.
- ^ "Rechtliche Hinweise". Oracle.com. Oracle Corporation. Archiviert vom Original am 2021-06-05. Abgerufen 2021-05-08.
- ^ "Vanille js". Vanilla-js.com. 2020-06-16. Archiviert vom Original am 16. Juni 2020. Abgerufen 17. Juni, 2020.
- ^ "Server-Seite JavaScript-Handbuch". Oracle.com. Oracle Corporation. 11. Dezember 1998. Archiviert vom Original am 11. März 2021. Abgerufen 8. Mai, 2021.
- ^ Clinick, Andrew (14. Juli 2000). "Einführung von Jscript .net". Microsoft Developer Network. Microsoft. Archiviert Aus dem Original am 10. November 2017. Abgerufen 10. April, 2018.
[S] Ince der Einführung von JScript Version 1.0 von 1996 ... Wir haben eine stetige Zunahme der Verwendung von JScript auf dem Server festgestellt - insbesondere auf aktiven Serverseiten (ASP).
- ^ a b Mahemoff, Michael (17. Dezember 2009). "Serverseitig JavaScript, zurück mit einer Rache". Readwrite.com. Archiviert Aus dem Original am 17. Juni 2016. Abgerufen 16. Juli, 2016.
- ^ "JavaScript für Acrobat". Adobe.com. 2009-08-07. Archiviert Aus dem Original am 7. August 2009. Abgerufen 18. August, 2009.
- ^ Tr .itter (2013-02-02). "Beantwortung der Frage:" Wie entwickle ich eine App für Gnome? "". LiveJournal.com. Archiviert vom Original am 2013-02-11. Abgerufen 2013-02-07.
- ^ "Tessel 2 ... nutzen Sie alle Bibliotheken von Node.js, um nützliche Geräte in Minuten mit Tessel zu erstellen.". Tessel.io. Archiviert vom Original am 2021-05-26. Abgerufen 2021-05-08.
- ^ "Node.js raspberry pi gpio Einführung". w3schools.com. Archiviert vom Original am 2021-08-13. Abgerufen 2020-05-03.
- ^ "Espruino - JavaScript für Mikrocontroller". Espruino.com. Archiviert vom Original am 2020-05-01. Abgerufen 2020-05-03.
- ^ Flanagan, David (17. August 2006). JavaScript: Der endgültige Handbuch: Der endgültige Handbuch. "O'Reilly Media, Inc.". p. 16. ISBN 978-0-596-55447-7. Archiviert vom Original am 1. August 2020. Abgerufen 29. März, 2019.
- ^ a b c d Korolev, Mikhail (2019-03-01). "JavaScript -Quirks in einem Bild aus dem Internet". Die Dev -Community. Archiviert Aus dem Original am 28. Oktober 2019. Abgerufen 28. Oktober, 2019.
- ^ "Wat". www.destroyallsoftware.com. 2012. Archiviert Aus dem Original am 28. Oktober 2019. Abgerufen 28. Oktober, 2019.
- ^ "JavaScript -Datentypen und Datenstrukturen - JavaScript | Mdn". Entwickler.mozilla.org. 16. Februar 2017. Archiviert Aus dem Original am 14. März 2017. Abgerufen 24. Februar, 2017.
- ^ Flanagan 2006, S. 176–178.
- ^ Crockford, Douglas. "Prototypaler Vererbung in JavaScript". Archiviert vom Original am 13. August 2013. Abgerufen 20. August 2013.
- ^ "Vererbung und Prototypkette". Mozilla Developer Network. Mozilla. Archiviert vom Original am 25. April 2013. Abgerufen 6. April, 2013.
- ^ Herman, David (2013). Effektiver JavaScript. Addison-Wesley. p. 83. ISBN 978-0-321-81218-6.
- ^ Haverbeke, Marijn (2011). Eloquent JavaScript. Keine Stärkepresse. S. 95–97. ISBN 978-1-59327-282-1.
- ^ Katz, Yehuda (12. August 2011). "Prototypen" in JavaScript "verstehen". Archiviert Aus dem Original am 5. April 2013. Abgerufen 6. April, 2013.
- ^ Herman, David (2013). Effektiver JavaScript. Addison-Wesley. S. 125–127. ISBN 978-0-321-81218-6.
- ^ "Funktion - JavaScript". MDN Web Docs. Abgerufen 2021-10-30.
- ^ "Eigenschaften des Funktionsobjekts". Es5.github.com. Archiviert Aus dem Original am 28. Januar 2013. Abgerufen 26. Mai, 2013.
- ^ Flanagan 2006, p. 141.
- ^ Die vielen Talente von JavaScript für die Verallgemeinerung rollenorientierter Programmieransätze wie Merkmale und Mischungen Archiviert 2017-10-05 in der Wayback -Maschine, Peterseliger.blogpsot.de, 11. April 2014.
- ^ Merkmale für JavaScript Archiviert 2014-07-24 bei der Wayback -Maschine, 2010.
- ^ "Home | Cocktailjs". Cocktailjs.github.io. Archiviert Aus dem Original am 4. Februar 2017. Abgerufen 24. Februar, 2017.
- ^ Angus Croll, Ein neuer Blick auf JavaScript Mixins Archiviert 2020-04-15 am Wayback -Maschine, veröffentlicht am 31. Mai 2011.
- ^ "Parallelitätsmodell und Ereignisschleife". Mozilla Developer Network. Archiviert Aus dem Original am 5. September 2015. Abgerufen 28. August, 2015.
- ^ Haverbeke, Marijn (2011). Eloquent JavaScript. Keine Stärkepresse. S. 139–149. ISBN 978-1-59327-282-1.
- ^ "E4X - Archiv des veralteten Inhalts | Mdn". Mozilla Developer Network. Mozilla Foundation. 14. Februar 2014. Archiviert von das Original am 24. Juli 2014. Abgerufen 13. Juli, 2014.
- ^ "var - JavaScript - Mdn". Das Mozilla Developer Network. Archiviert Aus dem Original am 23. Dezember 2012. Abgerufen 22. Dezember, 2012.
- ^ "Lassen". MDN Web Docs. Mozilla. Archiviert Aus dem Original am 28. Mai 2019. Abgerufen 27. Juni, 2018.
- ^ "const". MDN Web Docs. Mozilla. Archiviert Aus dem Original am 28. Juni 2018. Abgerufen 27. Juni, 2018.
- ^ "ECMascript-Sprachspezifikation-ECMA-262 Edition 5.1". ECMA International. Archiviert Aus dem Original am 26. November 2012. Abgerufen 22. Dezember, 2012.
- ^ "Konsole". Mozilla Developer Network. Mozilla. Archiviert Aus dem Original am 28. Februar 2013. Abgerufen 6. April, 2013.
- ^ "Argumente". Mozilla Developer Network. Mozilla. Archiviert vom Original am 13. April 2013. Abgerufen 6. April, 2013.
- ^ "JavaScript -Module". MDN Web Docs. Mozilla. Archiviert Aus dem Original am 17. Juli 2022. Abgerufen 28. Juli 2022.
- ^ "JavaScript für Werbung sicher machen". Adsafe. Archiviert vom Original am 2021-07-06. Abgerufen 2021-05-08.
- ^ "Sicheres ECMA -Skript (SES)" ". Archiviert Aus dem Original am 15. Mai 2013. Abgerufen 26. Mai, 2013.
- ^ "Google Caja -Projekt". Google. Archiviert vom Original am 2021-01-22. Abgerufen 2021-07-09.
- ^ "Mozilla Cross-Site Scripting Vulnerability gemeldet und behoben-Mozillazine Talkback". Mozillazine.org. Archiviert Aus dem Original am 21. Juli 2011. Abgerufen 24. Februar, 2017.
- ^ Kottelin, Thor (17. Juni 2008). "Klicken Sie mit der rechten Maustaste" Schutz "? Vergessen Sie es". blog.anta.net. Archiviert von das Original am 28. Juli 2022. Abgerufen 28. Juli 2022.
- ^ Rehorik, Jan. "Warum Sie niemals sensible Daten in Ihr JavaScript einfügen sollten". ServiceObjects Blog. ServiceObjects. Archiviert Aus dem Original am 3. Juni 2019. Abgerufen 3. Juni, 2019.
- ^ a b Lauinger, Tobias; Chaabane, Abdelberi; Arshad, Sajjad; Robertson, William; Wilson, Christo; Kirda, Engin (21. Dezember 2016). "Du sollst nicht von mir abhängen: Analyse der Verwendung veralteter JavaScript -Bibliotheken im Web" (PDF). Nordöstliche Universität. doi:10.14722/nds.2017.23414. Archiviert von das Original (PDF) am 29. März 2017. Abgerufen 28. Juli 2022.
- ^ Collins, Keith (27. März 2016). "Wie ein Programmierer das Internet gebrochen hat, indem er ein kleines Stück Code löschte". Quarz. Archiviert Aus dem Original am 22. Februar 2017. Abgerufen 22. Februar, 2017.
- ^ SC Magazine UK, Die 11 Zeilen des gelöschten Codes des Entwicklers 'bricht das Internet' Archiviert 23. Februar 2017 bei der Wayback -Maschine
- ^ Mozilla Corporation, Pufferüberlauf in Crypto.SignText () Archiviert 2014-06-04 bei der Wayback -Maschine
- ^ Festa, Paul (19. August 1998). "Puffer-Overflow-Fehler im IE". CNET. Archiviert von das Original Am 25. Dezember 2002.
- ^ SecurityTracker.com, Apple Safari JavaScript -Puffer -Überlauf lässt Remote -Benutzer beliebiger Code ausführen, und HTTP -Umleitungsfehler lässt Remote -Benutzer auf Dateien zugreifen Archiviert 2010-02-18 bei der Wayback -Maschine
- ^ SecurityFocus, Microsoft WebViewFoldericon ActiveX Control Puffer Overflow Schwachstelle Archiviert 2011-10-11 bei der Wayback -Maschine
- ^ Fusionsbehörde, Makromedia Flash ActiveX Puffer Überlauf Archiviert 13. August 2011 bei der Wayback -Maschine
- ^ "Schutzmodus in Vista IE7 - IEBLOG". Blogs.msdn.com. 9. Februar 2006. Archiviert Aus dem Original am 23. Januar 2010. Abgerufen 24. Februar, 2017.
- ^ US -Zertifikat, Sicherheitsanfälligkeitsnotiz VU#713878: Microsoft Internet Explorer bestätigt keine ordnungsgemäße Quelle des umgeleiteten Rahmens Archiviert 2009-10-30 bei der Wayback -Maschine
- ^ Mozilla Foundation, MOZILLA Foundation Security Advisory 2005–41: Berechtigungskalation über DOM -Immobilienüberschreibungen Archiviert 2014-06-04 bei der Wayback -Maschine
- ^ Andersen, Starr (2004-08-09). "Teil 5: Verbessertes Browsersicherheit". TECHNET. Microsoft Docs. Änderungen der Funktionalität in Windows XP Service Pack 2. Abgerufen 2021-10-20.
- ^ Für ein Beispiel eines seltenen JavaScript -Trojaner -Pferdes siehe Symantec Corporation, Js.seeker.k Archiviert 2011-09-13 bei der Wayback -Maschine
- ^ Gruss, Daniel; Maurice, Clémentine; Mangard, Stefan (24. Juli 2015). "RowHammer.js: Ein Remote-Software-induzierter Fehlerangriff in JavaScript". Arxiv:1507.06955 [cs.cr].
- ^ Jean-Pharuns, Alix (30. Juli 2015). "Rowhammer.js ist der genialste Hack, den ich je gesehen habe". Hauptplatine. Vize. Archiviert Aus dem Original am 27. Januar 2018. Abgerufen 26. Januar, 2018.
- ^ Goodin, Dan (4. August 2015). "Dram 'Bitflipping' zum Angriff auf PCs: Fügen Sie einfach JavaScript hinzu". ARS Technica. Archiviert Aus dem Original am 27. Januar 2018. Abgerufen 26. Januar, 2018.
- ^ Auerbach, David (28. Juli 2015). "Rowhammer Security Exploit: Warum ein neuer Sicherheitangriff wirklich erschreckend ist". Slate.com. Archiviert Aus dem Original am 30. Juli 2015. Abgerufen 29. Juli, 2015.
- ^ ANC Archiviert 2017-03-16 bei der Wayback -Maschine Vusec, 2017
- ^ Neues ASLR-Busting JavaScript ist kurz davor, Drive-by-Exploits viel böser zu machen Archiviert 2017-03-16 bei der Wayback -Maschine ARS Technica, 2017
- ^ Specter Attack Archiviert 2018-01-03 bei der Wayback -Maschine Specter Attack
- ^ "Benchmark.js". Benchmarkjs.com. Archiviert vom Original am 2016-12-19. Abgerufen 2016-11-06.
- ^ Jsben.ch. "Jsben.ch Performance Benchmarking Playground für JavaScript". Jsben.ch. Archiviert vom Original am 2021-02-27. Abgerufen 2021-08-13.
- ^ Eich, Brendan (3. April 2008). "Popularität". Archiviert Aus dem Original am 3. Juli 2011. Abgerufen 19. Januar, 2012.
- ^ "Edge Browser Switches WebAssembly zu 'On' - Visual Studio Magazine". Visual Studio Magazine. Archiviert vom Original am 2018-02-10. Abgerufen 2018-02-09.
- ^ "Häufig gestellte Fragen". ASM.Js. Archiviert Aus dem Original am 4. Juni 2014. Abgerufen 13. April, 2014.
Weitere Lektüre
- Flanagan, David. JavaScript: Der endgültige Handbuch. 7. Ausgabe. Sebastopol, Kalifornien: O'Reilly, 2020.
- Haverbeke, Marijn. Eloquent JavaScript.3. Auflage.No Starch Press, 2018. 472 Seiten. ISBN978-1593279509.(Download)
- Zakas, Nicholas. Prinzipien des objektorientierten JavaScripts, 1. Auflage.No Starch Press, 2014. 120 Seiten. ISBN978-1593275402.
Externe Links
- JavaScript bei Curlie
- "JavaScript: Die ersten 20 Jahre". Abgerufen 2022-02-06.