Empfohlenes kostenloses Lernen: Javascript-Lern-Tutorial
1. Was ist JavaScript? 1-1. JavaScript-Implementierung. Obwohl JavaScript und ECMAScript im Wesentlichen vorhanden sind Synonyme, aber JavaScript ist weit mehr als das, was ECMA-262 definiert. Die vollständige JavaScript-Implementierung enthält:
Core (ECMAScript) Document Object Model (DOM)
Browser Object Model (BOM)
- Webbrowser ist lediglich eine Hostumgebung (Hostumgebung), in der eine ECMAScript-Implementierung vorhanden sein kann. Die Host-Umgebung stellt eine Basisimplementierung von ECMAScript und die für die Interaktion mit der Umgebung selbst erforderlichen Erweiterungen bereit. Erweiterungen (z. B. DOM) verwenden ECMAScript-Kerntypen und -Syntax, um zusätzliche umgebungsspezifische Funktionen bereitzustellen. Zu den weiteren Hosting-Umgebungen gehören die serverseitige JavaScript-Plattform Node.js und das bald veraltete Adobe Flash. Beschreibt auf einer grundlegenden Ebene die Sprache: Syntax, Typen, Anweisungen, Schlüsselwörter, reservierte Wörter, Operatoren, globale Objekte.
- ECMAScript ist nur der Name für eine Sprache, die alle in dieser Spezifikation beschriebenen Aspekte implementiert. JavaScript implementiert ECMAScript und Adobe ActionScript implementiert auch
- ECMAScript.
1-2, DOM
Das Document Object Model (DOM, Document Object Model) ist eine Anwendungsprogrammierschnittstelle (API) zur Verwendung von erweitertem XML in HTML. DOM abstrahiert die gesamte Seite in eine Reihe hierarchischer Knoten. Jede Komponente einer HTML- oder XML-Seite ist ein Knoten, der unterschiedliche Daten enthält. Mit
DOM können Entwickler den Inhalt und die Struktur von Webseiten nach ihren Wünschen steuern, indem sie einen Baum erstellen, der das Dokument darstellt. Mithilfe der DOM-API können Knoten einfach gelöscht, hinzugefügt, ersetzt und geändert werden.
1-3, BOM
IE3 und Netscape Navigator 3 stellen die
Browser Object Model
Normalerweise werden alle browserspezifischen Erweiterungen in den BOM-Bereich einbezogen. Hier sind einige solcher Erweiterungen:
Die Möglichkeit, ein neues Browserfenster zu öffnen;Navigatorobjekt, das detaillierte Informationen über den Browser bereitstellt; , das detaillierte Informationen über die vom Browser geladene Seite bereitstellt;
Bildschirmobjekt, das detaillierte Informationen über die Bildschirmauflösung des Benutzers bereitstellt;
Leistungsobjekt, das detaillierte Informationen über die Speichernutzung des Browsers, das Navigationsverhalten und die Zeitstatistik bereitstellt;
- Andere benutzerdefinierte Objekte, wie XMLHttpRequest und IEs
- ActiveXObject
- 2. JavaScript in HTML
- 2-1,
script
-Element - JavaScript einfügen Die wichtigste Möglichkeit, dies mit HTML zu tun, ist die Verwendung des Skriptelements. Dieses
- Element wurde von Netscape erstellt und erstmals in Netscape Navigator 2 implementiert. Später wurde dieses Element offiziell zur HTML-Spezifikation hinzugefügt. Das Skriptelement verfügt über die 8 unten aufgeführten Attribute.
-
async
: Optional. Gibt an, dass der Download des Skripts sofort beginnen soll, andere Seitenaktionen wie das Herunterladen von Ressourcen oder das Warten auf das Laden anderer Skripts können jedoch nicht verhindert werden. Nur gültig für externe Skriptdateien.
Zeichensatz: optional. Verwenden Sie den durch das src-Attribut angegebenen Codezeichensatz. Dieses Attribut wird selten verwendet, da die meisten Browser sich nicht um seinen Wert kümmern.
script
元素
将JavaScript插入HTML的主要方法是使用 script 元素。这
个元素是由网景公司创造出来,并最早在Netscape Navigator 2中实现
的。后来,这个元素被正式加入到HTML规范。 script 元素有下
列8个属性。
async
crossorigin: Optional. Konfigurieren Sie CORS-Einstellungen (Cross-Origin Resource Sharing) für verwandte Anforderungen. CORS wird standardmäßig nicht verwendet. crossorigin="anonymous" Profilanfragen müssen das Anmeldeinformations-Flag nicht setzen. crossorigin="use-credentials" setzt das Anmeldeinformations-Flag, was bedeutet, dass ausgehende Anfragen Anmeldeinformationen enthalten.aufschieben: Optional. Dies bedeutet, dass es kein Problem bei der Ausführung des Skripts gibt, nachdem die Analyse und Anzeige des Dokuments abgeschlossen ist. Nur gültig für externe Skriptdateien. In IE7 und früheren Versionen kann dieses Attribut auch für Inline-Skripte angegeben werden.
Integrität: Optional. Ermöglicht den Vergleich empfangener Ressourcen mit angegebenen kryptografischen Signaturen zur Überprüfung der Subressourcenintegrität (SRI). Wenn die Signatur der empfangenen Ressource nicht mit der durch dieses Attribut angegebenen Signatur übereinstimmt, meldet die Seite einen Fehler und das Skript wird nicht ausgeführt. Mit diesem Attribut kann sichergestellt werden, dass ein Content Delivery Network (CDN) keine schädlichen Inhalte bereitstellt.
- Sprache: veraltet. Ursprünglich verwendet, um eine Skriptsprache (z. B. „JavaScript“, „JavaScript1.2“ oder „VBScript“) innerhalb eines Codeblocks darzustellen. Die meisten Browser ignorieren dieses Attribut und sollten nicht mehr verwendet werden.
src: Optional. Stellt eine externe Datei dar, die auszuführenden Code enthält.
Typ: Optional. Stellt anstelle von language den Inhaltstyp (auch MIME-Typ genannt) der Skriptsprache im Codeblock dar.
Der im Skript enthaltene Code wird von oben nach unten interpretiert
2-2,
Das Skriptelement, das das src-Attribut verwendet, sollte keinen anderen JavaScript-Code mehr in den Skript- und /script-Tags enthalten. Wenn beides bereitgestellt wird, lädt der Browser einfach die Skriptdatei herunter und führt sie aus, wobei der Inline-Code ignoriert wird.
Eine der mächtigsten und umstrittensten Funktionen des Skriptelements ist, dass es JavaScript-Dateien von externen Domänen enthalten kann. Ähnlich wie das img-Element kann das src-Attribut des script-Elements eine vollständige URL sein, und die Ressource, auf die diese URL verweist, darf sich nicht in derselben Domäne befinden wie die HTML-Seite, die sie enthält
2-3, Dokumentmodus
kann verwendet werden, um den Dokumentmodus umzuschalten. Es gibt zwei anfängliche Dokumentmodi: gemischter Modus (Mackenmodus) und Standardmodus (Standardmodus). Ersteres sorgt dafür, dass der IE dem IE5 ähnelt (unterstützt einige nicht standardmäßige Funktionen), und der zweite sorgt dafür, dass sich der IE standardkonform verhält. Obwohl der Hauptunterschied zwischen den beiden Modi nur im über CSS gerenderten Inhalt besteht, gibt es auch einige damit verbundene Auswirkungen oder Nebenwirkungen auf JavaScript. Diese Nebenwirkungen werden in diesem Buch häufig erwähnt.
Nachdem der IE erstmals die Umschaltung des Dokumentmodus unterstützte, folgten auch andere Browser diesem Beispiel. Mit der weit verbreiteten Implementierung von Browsern ist ein dritter Dokumentmodus entstanden: der Quasi-Standardmodus (fast
Standardmodus). Browser in diesem Modus unterstützen viele Standardfunktionen, sind jedoch nicht so streng wie die Standards. Der Hauptunterschied besteht darin, wie der Leerraum um Bildelemente herum behandelt wird (am auffälligsten bei der Verwendung von Bildern in Tabellen).
Der Promiscuous-Modus wird in allen Browsern aktiviert, indem die Doctype-Deklaration am Anfang des Dokuments weggelassen wird. Diese Vereinbarung ist unangemessen, da der gemischte Modus in verschiedenen Browsern sehr unterschiedlich ist und es ohne die Verwendung schwarzer Technologie grundsätzlich keine Browserkonsistenz gibt.
2-4, Noscript-Element
Angesichts des Problems, dass frühe Browser kein JavaScript unterstützen, ist eine Lösung für eine ordnungsgemäße Seitenverschlechterung erforderlich. Schließlich tauchte das Element auf und wurde verwendet, um Browsern, die kein JavaScript unterstützten, alternative Inhalte bereitzustellen. Obwohl heutige Browser JavaScript zu 100 % unterstützen, hat dieses Element immer noch seine Verwendung für Browser, die JavaScript deaktivieren. Das
-Element kann jedes HTML-Element enthalten, das in
- Der Browser unterstützt keine Skripte
- Die Browserunterstützung für Skripte ist deaktiviert
3. Grammatikgrundlagen
3-1, Grammatik
Das erste, was Sie wissen müssen, ist, dass in ECMAScript bei allem die Groß-/Kleinschreibung beachtet wird. Unabhängig davon, ob es sich um eine Variable, einen Funktionsnamen oder einen Operator handelt, wird die Groß-/Kleinschreibung beachtet. Mit anderen Worten, der Variablentest und der Variablentest sind zwei verschiedene Variablen. Ebenso kann typeof nicht als Funktionsname verwendet werden, da es sich um ein Schlüsselwort handelt (mehr dazu später). Aber Typeof ist ein vollkommen gültiger Funktionsname.
3-2. Bezeichner
Der sogenannte Bezeichner ist der Name einer Variablen, Funktion, eines Attributs oder eines Funktionsparameters. Ein Bezeichner kann aus einem oder mehreren der folgenden Zeichen bestehen:
- Das erste Zeichen muss ein Buchstabe, ein Unterstrich (_) oder ein Dollarzeichen ($) sein;
- Die übrigen Zeichen können Buchstaben, Unterstriche oder Dollarzeichen sein oder Zahlen.
Die Buchstaben im Bezeichner können Buchstaben in erweiterten ASCII- oder Unicode-Alphabeten wie À und Æ sein (dies wird jedoch nicht empfohlen).
Konventionell verwenden ECMAScript-Bezeichner die Kamel-Schreibweise, d. h. der erste Buchstabe des ersten Wortes ist kleingeschrieben und der erste Buchstabe jedes nachfolgenden Wortes wird groß geschrieben
3-3, strikter Modus
ECMAScript 5 fügt strikt hinzu Modus (strenger Modus) Konzept. Der strikte Modus ist ein anderes JavaScript-Analyse- und Ausführungsmodell. Einige nicht standardmäßige Schreibmethoden von ECMAScript 3 werden in diesem Modus verarbeitet und es werden Fehler für unsichere Aktivitäten
3-4, Schlüsselwörter und reservierte Wörter
ECMA ausgegeben -262 beschreibt eine Reihe reservierter Schlüsselwörter, die spezielle Verwendungszwecke haben, z. B. die Angabe des Anfangs und Endes einer Steueranweisung oder die Ausführung einer bestimmten Operation
Alle in ECMA-262 6. Ausgabe angegebenen Schlüsselwörter:
break do in typeof case else instanceof var catch export new void class extends return while const finally super with continue for switch yield debugger function this default if throw delete import try
Die Spezifikation auch beschreibt eine Reihe zukünftiger reservierter Wörter, die auch nicht als Bezeichner oder Eigenschaftsnamen verwendet werden können. Obwohl reservierte Wörter in der Sprache keinen bestimmten Zweck haben, sind sie für die zukünftige Verwendung als Schlüsselwörter reserviert
3-5. ECMAScript-Variablen sind lose typisiert, was bedeutet, dass Variablen zum Speichern jeder Art von Daten verwendet werden können. Jede Variable ist nichts anderes als ein benannter Platzhalter, der einen beliebigen Wert enthält. Es gibt drei Schlüsselwörter zum Deklarieren von Variablen: var, const und let. Unter anderem kann var in allen Versionen von CMAScript verwendet werden, während const und let nur in ECMAScript 6 und späteren Versionen verwendet werden können
3-6, Schlüsselwort var
Var-Deklarationsumfang
Das Hauptproblem besteht darin, dass eine mit dem Var-Operator definierte Variable zu einer lokalen Variablen der Funktion wird, die sie enthält. Wenn Sie beispielsweise var verwenden, um eine Variable innerhalb einer Funktion zu definieren, bedeutet dies, dass die Variable zerstört wird, wenn die Funktion beendet wirdVar-Deklarationsförderung
Bei Verwendung von var meldet der folgende Code keinen Fehler. Dies liegt daran, dass mit diesem Schlüsselwort deklarierte Variablen automatisch an die Spitze des Funktionsbereichs heraufgestuft werden
3-7. let-Deklaration
let hat ähnliche Funktionen wie var, es gibt jedoch sehr wichtige Unterschiede. Der offensichtlichste Unterschied besteht darin, dass der Geltungsbereich von let-Deklarationen der Blockbereich ist, während der Geltungsbereich von var-Deklarationen der Funktionsbereich ist.
Temporäre Totzone
Ein weiterer wichtiger Unterschied zwischen let und var besteht darin, dass von let deklarierte Variablen im Gültigkeitsbereich nicht hochgestuft werden.Globale Deklaration
Im Gegensatz zum Schlüsselwort var werden mit let deklarierte Variablen im globalen Bereich nicht zu Attributen des Fensterobjekts (mit var deklarierte Variablen werden)Bedingte Deklaration
Bei Verwendung von var zum Deklarieren von Variablen Wenn die Wenn die Deklaration angehoben wird, führt die JavaScript-Engine die redundanten Deklarationen automatisch zu einer einzigen Deklaration am oberen Ende des Bereichs zusammen. Da der Gültigkeitsbereich von let ein Block ist, ist es unmöglich zu überprüfen, ob eine Variable mit demselben Namen zuvor mit let deklariert wurde, und es ist auch unmöglich, sie ohne vorherige Deklarationlet-Deklaration in der for-Schleife
zu deklarieren Wenn let erscheint, dringt die durch die for-Schleife definierte Iterationsvariable außerhalb des Schleifenkörpers einconst-Deklaration
Das Verhalten von const ist grundsätzlich dasselbe wie let Sie müssen gleichzeitig die Variable initialisieren und versuchen, die const-Deklaration zu ändern. Variablen können Laufzeitfehler verursachen.
3-8, Deklarationsstil und Best Practices
ECMAScript 6 fügt let und const hinzu, was objektiv eine bessere Unterstützung für die Sprache bietet, um Umfang und Semantik genauer zu deklarieren. Die JavaScript-Community wird seit vielen Jahren von verschiedenen Problemen geplagt, die durch sich seltsam verhaltende Variablen verursacht werden. Mit dem Aufkommen dieser beiden neuen Schlüsselwörter entstehen nach und nach neue Best Practices, die zur Verbesserung der Codequalität beitragen.
- Var nicht verwenden
Mit let und const werden die meisten Entwickler feststellen, dass sie var nicht mehr benötigen. Die Beschränkung auf let und const trägt zur Verbesserung der Codequalität bei, da Variablen klare Gültigkeitsbereiche, Deklarationsorte und unveränderliche Werte haben. - const hat Priorität, let kommt an zweiter Stelle
Die Verwendung der const-Deklaration kann erzwingen, dass die Variable unverändert bleibt, wenn der Browser ausgeführt wird, und kann auch statischen Code-Analysetools ermöglichen, illegale Zuweisungsvorgänge im Voraus zu erkennen. Daher glauben viele Entwickler, dass sie zuerst const zum Deklarieren von Variablen verwenden und let nur verwenden sollten, wenn sie im Voraus wissen, dass es in Zukunft Änderungen geben wird. Dies ermöglicht Entwicklern, sicherer zu schließen, dass sich der Wert bestimmter Variablen nie ändert, und kann auch unerwartetes Verhalten, das durch versehentliche Zuweisungen verursacht wird, schnell erkennen.
4. Datentypen
ECMAScript verfügt über 6 einfache Datentypen (auch primitive Typen genannt): Undefiniert, Null, Boolesch, Zahl, Zeichenfolge und Symbol. Symbol (Symbol) ist neu in ECMAScript 6. Es gibt auch einen komplexen Datentyp namens Object. Objekt ist eine ungeordnete Sammlung von Name-Wert-Paaren. Da Sie in ECMAScript keine eigenen Datentypen definieren können, können alle Werte durch einen der sieben oben genannten Datentypen dargestellt werden. Nur 7 Datentypen scheinen nicht auszureichen, um alle Daten darzustellen. Die Datentypen von ECMAScript sind jedoch sehr flexibel. Da das Typsystem von ECMAScript locker ist, ist eine Methode zur Bestimmung des Datentyps erforderlich einer beliebigen Variablen. Hier kommt die Art des Operators ins Spiel. Wenn Sie den Operator „typeof“ für einen Wert verwenden, wird eine der folgenden Zeichenfolgen zurückgegeben:
„undefiniert“ bedeutet, dass der Wert undefiniert ist;„boolean“ bedeutet, dass der Wert ein Boolescher Wert ist; „ „Zahl“ bedeutet, dass der Wert ein numerischer Wert ist; „Objekt“ bedeutet, dass der Wert ein Objekt (keine Funktion) oder Null ist;
„Funktion“ bedeutet, dass der Wert eine Funktion ist; „Symbol“ bedeutet, dass der Wert ein Symbol ist.
4-2. Undefinierter Typ
Der undefinierte Typ hat nur einen Wert, nämlich den Sonderwert undefiniert. Wenn eine Variable mit var oder let deklariert, aber nicht initialisiert wird, ist dies gleichbedeutend damit, der Variablen einen undefinierten Wert zuzuweisen. Auch wenn nicht initialisierten Variablen automatisch ein undefinierter Wert zugewiesen wird, empfehlen wir dennoch, die Variable beim Deklarieren zu initialisieren. Wenn typeof „undefiniert“ zurückgibt, wissen Sie auf diese Weise, dass dies daran liegt, dass die angegebene Variable noch nicht deklariert wurde, und nicht daran, dass sie deklariert, aber nicht initialisiert wurde.
4-3. Null-Typ
Der Null-Typ hat auch nur einen Wert, nämlich den Sonderwert null . Logisch gesehen stellt der Nullwert einen Nullobjektzeiger dar, weshalb die Übergabe von Null an typeof „object“ zurückgibt. Wenn Sie eine Variable definieren, die in Zukunft einen Objektwert enthalten soll, wird empfohlen, sie mit null zu initialisieren und nicht mit andere Werte verwenden. Auf diese Weise können Sie, solange Sie prüfen, ob der Wert dieser Variablen null ist, später feststellen, ob dieser Variablen ein Verweis auf ein Objekt zugewiesen wurdeDer Vergleich von null und undefiniert mit dem Gleichheitsoperator (==) gibt immer true zurück. Beachten Sie jedoch, dass dieser Operator seine Operanden zum Vergleich umwandelt.
Obwohl null und undefiniert verwandt sind, sind ihre Verwendungen völlig unterschiedlich. Wie bereits erwähnt, müssen Sie einen Variablenwert niemals explizit auf undefiniert setzen. Aber null ist nicht so. Immer wenn eine Variable ein Objekt enthält und es kein solches Objekt zum Halten gibt, muss die Variable mit Null gefüllt werden. Dadurch wird die Semantik beibehalten, dass null ein Zeiger auf ein Nullobjekt ist, und es weiter von undefiniert unterschieden.
null ist ein falscher Wert. So kann es bei Bedarf präziser erkannt werden. Bedenken Sie jedoch, dass es viele andere mögliche Werte gibt, die ebenfalls falsch sind. Stellen Sie also sicher, dass Sie den Literalwert Null erkennen möchten und nicht nur den falschen Wert
4-4. Der Typ Boolean (Boolean) ist einer der am häufigsten verwendeten Typen in ECMAScript. Zwei Literalwerte: wahr und falsch. Diese beiden booleschen Werte unterscheiden sich von numerischen Werten, daher ist true nicht gleich 1 und false nicht gleich 0
Hinweis: Bei den booleschen Literalen true und false wird die Groß-/Kleinschreibung beachtet, daher ist True und False (und andere gemischte Werte) Fallformen) sind ein gültiger Bezeichner, aber kein boolescher Wert.4-5, Zahlentyp
Der vielleicht interessanteste Datentyp in ECMAScript ist Zahl. Der Zahlentyp stellt Ganzzahlen und Gleitkommawerte (in einigen Sprachen auch Werte mit doppelter Genauigkeit genannt) im IEEE 754-Format dar. Verschiedene numerische Typen haben auch unterschiedliche numerische Literalformate
Gleitkommawert- Um einen Gleitkommawert zu definieren, muss der Wert einen Dezimalpunkt enthalten und es muss mindestens
- eine Ziffer nach dem Dezimalpunkt stehen. Obwohl es nicht notwendig ist, vor dem Dezimalpunkt eine Ganzzahl zu haben, wird dies empfohlen.
Wertebereich Aufgrund von Speicherbeschränkungen unterstützt ECMAScript nicht die Darstellung aller Werte der Welt. Der minimale Wert, der von ECMAScript dargestellt werden kann, ist in den meisten Browsern 5e-324. Der maximale Wert, der dargestellt werden kann, ist in den meisten Browsern 1,797 693 134 862 315 Browser. 7e+308. Wenn das numerische Ergebnis einer Berechnung den Bereich überschreitet, den JavaScript darstellen kann, wird der Wert automatisch in einen speziellen Infinity-Wert umgewandelt. Jede nicht darstellbare negative Zahl wird durch -Infinity (negative Unendlichkeit) dargestellt, und jede nicht darstellbare positive Zahl wird durch Infinity (positive Unendlichkeit) dargestellt. Wenn eine Berechnung eine positive Unendlichkeit oder eine negative Unendlichkeit zurückgibt, kann der Wert in keiner Berechnung weiter verwendet werden. Dies liegt daran, dass Infinity keine numerische Darstellung hat, die für Berechnungen verwendet werden kann. Um zu bestimmen, ob ein Wert endlich ist (d. h. zwischen den Mindest- und Höchstwerten, die JavaScript darstellen kann), können Sie die Funktion isFinite() verwenden -
NaN Es gibt einen speziellen Wert namens NaN, der „ kein numerischer Wert“ (Keine Zahl), wird verwendet, um anzuzeigen, dass die Operation, die eine Zahl zurückgeben sollte, fehlgeschlagen ist (anstatt einen Fehler auszulösen). Beispielsweise führt die Division einer beliebigen Zahl durch Null in anderen Sprachen normalerweise zu einem Fehler, der die Codeausführung abbricht. Aber in ECMAScript führt die Division durch 0, +0 oder -0 zu NaN -
Numerische Konvertierung Es gibt 3 Funktionen, die nicht numerische Werte in numerische Werte umwandeln können: Number() , parseInt() und parseFloat( ). Number() ist eine Konvertierungsfunktion, die für jeden Datentyp verwendet werden kann. Die beiden letztgenannten Funktionen werden hauptsächlich zur Umwandlung von Zeichenfolgen in numerische Werte verwendet. Für die gleichen Parameter führen diese drei Funktionen unterschiedliche Operationen aus.
Es gibt einen speziellen Wert namens NaN, der „Keine Zahl“ (Keine Zahl) bedeutet. Er wird verwendet, um anzuzeigen, dass die Operation, die einen Wert zurückgeben sollte, fehlgeschlagen ist (). anstatt einen Fehler auszulösen).
4-7. Numerische Konvertierung
Es gibt 3 Funktionen, die nicht-numerische Werte in numerische Werte umwandeln können: Number(), parseInt() und parseFloat(). Number() ist eine Konvertierungsfunktion, die für jeden Datentyp verwendet werden kann. Die beiden letztgenannten Funktionen werden hauptsächlich zur Umwandlung von Zeichenfolgen in numerische Werte verwendet. Für die gleichen Parameter führen diese drei Funktionen unterschiedliche Operationen aus. Die Funktion Number() führt die Konvertierung basierend auf den folgenden Regeln durch. Boolescher Wert, true wird in 1 konvertiert, false wird in 0 konvertiert. Numerischer Wert, direkt zurückgegeben. null , gibt 0 zurück. undefiniert , gibt NaN zurück.
4-8. String-Typ
Der Datentyp String (String) stellt eine Folge von null oder mehr 16-Bit-Unicode-Zeichen dar. Zeichenfolgen können mit doppelten Anführungszeichen ("), einfachen Anführungszeichen (') oder Backticks (`) gekennzeichnet werden.
Zeichenliterale- Der Zeichenfolgendatentyp enthält einige Zeichenliterale, die zur Darstellung nicht druckbarer Zeichen oder anderer Zweckzeichen verwendet werden
-
-
In String konvertieren Es gibt zwei Möglichkeiten, einen Wert in einen String umzuwandeln. Der einzige Zweck dieser Methode ist die Rückgabe das String-Äquivalent des aktuellen Werts Vorlagenliterale
ECMAScript 6 bietet die Möglichkeit, Vorlagenliterale zum Definieren von Zeichenfolgen zu verwenden. Im Gegensatz zur Verwendung von einfachen oder doppelten Anführungszeichen behalten Vorlagenliterale Zeilenumbruchzeichen bei und können Zeichenfolgen über Zeilen hinweg definierenZeichenfolgeninterpolation
Eine der am häufigsten verwendeten Funktionen von Vorlagenliteralen ist die Unterstützung der Zeichenfolgeninterpolation, d. h. sie können in a definiert werden kontinuierlich Fügen Sie einen oder mehrere Werte ein. Technisch gesehen ist ein Vorlagenliteral kein String, sondern ein spezieller JavaScript-Syntaxausdruck, das Ergebnis nach der Auswertung ist jedoch ein String. Vorlagenliterale werden sofort ausgewertet und in Zeichenfolgeninstanzen konvertiert, wenn sie definiert werden.Vorlagenliteral-Tag-Funktionen
Vorlagenliterale unterstützen auch die Definition von Tag-Funktionen (Tag-Funktion). Das Interpolationsverhalten kann über die Tag-Funktion angepasst werden. Die Label-Funktion empfängt die durch Interpolationstokens getrennte Vorlage und das Ergebnis der Auswertung jedes Ausdrucks. Die Tag-Funktion selbst ist eine reguläre Funktion, die benutzerdefiniertes Verhalten anwendet, indem sie es dem Vorlagenliteral voranstellt,Originalzeichenfolge
Mithilfe von Vorlagenliteralen können Sie auch direkt den Inhalt des ursprünglichen Vorlagenliterals abrufen (z. B. Zeilenumbrüche oder Unicode-Zeichen). , anstatt durch konvertierte Zeichen dargestellt zu werden. Zu diesem Zweck können Sie die Standard-Tag-Funktion String.raw verwenden
5. Operatoren
ECMA-262 beschreibt eine Reihe von Operatoren, die zur Manipulation von Datenwerten verwendet werden können, einschließlich mathematischer Operatoren (z. B. Addition, Subtraktion), bitweise Operatoren, relationale Operatoren und Gleichheitsoperatoren usw. Operatoren in ECMAScript sind insofern einzigartig, als sie für eine Vielzahl von Werten verwendet werden können, darunter Zeichenfolgen, Zahlen, boolesche Werte und sogar Objekte. Bei der Anwendung auf ein Objekt rufen Operatoren normalerweise die Methoden valueOf() und/oder toString() auf, um einen berechenbaren Wert zu erhalten. 3.5.1 Unärer Operator Ein Operator, der nur mit einem Wert arbeitet, wird als unärer Operator bezeichnet. Der unäre Operator ist der einfachste Operator in ECMAScript.
5-1. Unäre Operatoren
- Inkrementierungs-/Dekrementierungsoperatoren
Die Inkrementierungs- und Dekrementierungsoperatoren werden direkt aus der C-Sprache kopiert, es gibt jedoch zwei Versionen: Präfixversion und Suffixversion. Wie der Name schon sagt, befindet sich die Präfixversion vor der zu bearbeitenden Variablen und die Suffixversion nach der zu bearbeitenden Variablen. Der Präfix-Inkrementoperator fügt einfach zwei Pluszeichen (++) vor die Variable hinzu
2 Die unären Additions- und Subtraktionsoperatoren sind für die meisten Entwickler nicht geeignet haben in ECMAScript den gleichen Zweck wie in der High-School-Mathematik. Die unäre Addition wird durch ein Pluszeichen (+) dargestellt, das vor der Variablen steht und keinen Einfluss auf den Wert hat. 5-2 Bitweise NICHT-Operator Der bitweise NICHT-Operator verwendet das Tilde-Symbol (~) bedeutet, dass seine Funktion darin besteht, das Einerkomplement des Wertes zurückzugeben. Bitweises NICHT ist einer der wenigen binären mathematischen Operatoren in ECMAScript
Bitweises UND Der bitweise UND-Operator wird durch das kaufmännische Und ( & ) dargestellt und hat zwei Operanden. Im Wesentlichen besteht bitweises UND darin, jedes Bit zweier Zahlen auszurichten und dann die entsprechende UND-Operation für jedes Bit basierend auf den Regeln in der Wahrheitstabelle durchzuführen.
Bitweises ODER
Der bitweise ODER-Operator wird durch das Pipe-Symbol ( | ) dargestellt und verfügt außerdem über zwei Operanden. Bitweises XOR verschiebt alle Ziffern des Werts um die angegebene Anzahl von Ziffern nach links. Wenn zum Beispiel der Wert 2 (binär 10) um 5 Bits nach links verschoben wird, erhalten Sie 64 (binär 1000000)Rechtsverschiebung mit Vorzeichen
Eine Rechtsverschiebung mit Vorzeichen wird durch zwei Größer-als-Zeichen ( >> ; ), wodurch alle 32 Bits eines Werts nach rechts verschoben werden, während das Vorzeichen (positiv oder negativ) erhalten bleibt. Die vorzeichenbehaftete Rechtsverschiebung ist eigentlich die umgekehrte Operation der Linksverschiebung Schicht. Bei positiven Zahlen hat eine vorzeichenlose Rechtsverschiebung das gleiche Ergebnis wie eine vorzeichenbehaftete Rechtsverschiebung
5-3. Boolescher Operator-
Der logische NICHT-Operator wird durch ein Ausrufezeichen ( ! ) dargestellt und kann sein Wird auf einen beliebigen Wert in ECMAScript angewendet. Dieser Operator gibt immer einen booleschen Wert zurück, unabhängig vom Datentyp, auf den er angewendet wird. Der logische NOT-Operator wandelt den Operanden zunächst in einen booleschen Wert um und negiert ihn dann
Logisches NICHT -
Der logische UND-Operator wird durch zwei kaufmännische Und-Zeichen ( && ) dargestellt und auf zwei Werte angewendet
Logisches UND -
Der logische ODER-Operator wird durch zwei Pipe-Symbole ( || ) dargestellt.
Logisches Oder -
5-4, Multiplikativer Operator
Multiplikationsoperator
Der Multiplikationsoperator wird durch ein Sternchen (*) dargestellt. Kann zur Berechnung verwendet werden das Produkt zweier Werte.-
Der Divisionsoperator wird durch einen Schrägstrich ( / ) dargestellt und wird verwendet, um den Quotienten der Division des ersten Operanden durch den zweiten Operanden zu berechnen
Divisionsoperator
Modulo-Operator
- Der Modulo-Operator (Rest) wird durch ein Prozentzeichen (%) dargestellt.
- Wenn der Operand ein numerischer Wert ist, wird eine reguläre Divisionsoperation durchgeführt und der Rest zurückgegeben.
- Wenn der Dividend unendlich und der Divisor endlich ist, wird NaN zurückgegeben.
- Wenn die Dividende ein endlicher Wert ist und der Divisor 0 ist, wird NaN zurückgegeben.
- Wenn Infinity durch Infinity dividiert wird, wird NaN zurückgegeben.
- Wenn die Dividende ein endlicher Wert und der Divisor ein unendlicher Wert ist, wird die Dividende zurückgegeben.
- Wenn der Dividend 0 ist und der Divisor nicht 0 ist, wird 0 zurückgegeben.
- Wenn es Operanden gibt, die keine numerischen Werte sind, verwenden Sie zunächst die Funktion Number(), um sie im Hintergrund in numerische Werte umzuwandeln, und wenden Sie dann die oben genannten Regeln an.
6. Anweisungen
ECMA-262 beschreibt einige Anweisungen (auch Flusskontrollanweisungen genannt), und der größte Teil der Syntax in ECMAScript spiegelt sich in Anweisungen wider. Anweisungen verwenden normalerweise ein oder mehrere Schlüsselwörter, um eine bestimmte Aufgabe zu erfüllen. Aussagen können einfach oder komplex sein. Es kann so einfach sein, der Funktion zu sagen, dass sie beendet werden soll, oder so komplex, wie das Auflisten einer Reihe von Anweisungen, die wiederholt ausgeführt werden sollen.
6-1. do-while-Anweisung
Die do-while-Anweisung ist eine Post-Test-Schleifenanweisung, das heißt, die Exit-Bedingung wird erst ausgewertet, nachdem der Code im Schleifenkörper ausgeführt wurde. Mit anderen Worten, der Code im Schleifenkörper wird mindestens einmal ausgeführt
Die while-Anweisung ist eine Schleifenanweisung, die zuerst getestet wird, d. h. die Exit-Bedingung wird zuerst erkannt und Dann wird der Code im Schleifenkörper ausgeführt. Daher darf der Code im while-Schleifenkörper nicht ausgeführt werden. 7. Funktionen
Funktionen sind Kernkomponenten jeder Sprache, da sie Anweisungen kapseln und diese dann überall und jederzeit ausführen können. Funktionen in ECMAScript werden mit dem Schlüsselwort function deklariert, gefolgt von einer Reihe von Parametern und dann dem Funktionskörper.Funktionen in ECMAScript müssen nicht angeben, ob ein Wert zurückgegeben werden soll. Jede Funktion kann jederzeit die Return-Anweisung verwenden, um den Wert der Funktion zurückzugeben, gefolgt vom zurückzugebenden Wert
Die Funktion sum() addiert die beiden Werte und gibt das Ergebnis zurück. Beachten Sie, dass es außer der Return-Anweisung keine spezielle Erklärung gibt, dass die Funktion einen Rückgabewert hat. Der strikte Modus unterliegt auch einigen Einschränkungen für Funktionen:Die Funktion kann nicht als eval oder als Argumente bezeichnet werden.
Die Parameter der Funktion können nicht aufgerufen werden eval oder arguments;Zwei Die Parameter der Funktion können nicht mit demselben Namen aufgerufen werden.
8. Variablen, Umfang und Speicher
4-1. Primitive Werte und Referenzwerte
ECMAScript-Variablen können zwei verschiedene Arten von Daten enthalten: Primitive Werte und Referenzwerte. Der primitive Wert ist der einfachste Datenwert, und der Referenzwert ist ein Objekt, das aus mehreren Werten besteht.Beim Zuweisen eines Werts zu einer Variablen muss die JavaScript-Engine bestimmen, ob der Wert ein primitiver Wert oder ein Referenzwert ist. Im vorherigen Kapitel wurden sechs Grundwerte besprochen: Undefiniert, Null, Boolesch, Zahl, Zeichenfolge und Symbol. Auf Variablen, die primitive Werte enthalten, wird über den Wert zugegriffen, da wir mit dem tatsächlichen Wert arbeiten, der in der Variablen gespeichert ist.
Referenzwerte sind im Speicher gespeicherte Objekte. Im Gegensatz zu anderen Sprachen erlaubt JavaScript keinen direkten Zugriff auf Speicherorte und kann daher nicht direkt auf dem Speicherbereich arbeiten, in dem sich das Objekt befindet. Beim Bedienen eines Objekts handelt es sich bei dem, was tatsächlich bedient wird, um einen Verweis auf das Objekt und nicht um das eigentliche Objekt selbst. Zu diesem Zweck wird auf die Variable, die den Referenzwert enthält, per Referenz zugegriffen. Hinweis: In vielen Sprachen werden Zeichenfolgen durch Objekte dargestellt und gelten daher als Referenztypen. ECMAScript bricht diese Konvention. Dynamische Eigenschaften Primitive Werte und Referenzwerte werden auf sehr ähnliche Weise definiert, beide erstellen eine Variable und weisen ihr dann einen Wert zu. Was jedoch mit dem Wert gemacht werden kann, nachdem die Variable ihn hält, ist ganz anders. Für Referenzwerte können deren Eigenschaften und Methoden jederzeit hinzugefügt, geändert und gelöscht werden.
- Neben unterschiedlichen Speichermethoden unterscheiden sich Originalwerte und Referenzwerte auch beim Kopieren über Variablen. Wenn Sie einer anderen Variablen über eine Variable einen Originalwert zuweisen, wird der Originalwert an den Speicherort der neuen Variablen kopiert.
- Beim Zuweisen eines Referenzwerts von einer Variablen zu einer anderen wird der in der Variablen gespeicherte Wert auch an den Speicherort der neuen Variablen kopiert. Der Unterschied besteht darin, dass der hier kopierte Wert tatsächlich ein Zeiger auf ein im Heapspeicher gespeichertes Objekt ist. Nachdem der Vorgang abgeschlossen ist, verweisen die beiden Variablen tatsächlich auf dasselbe Objekt, sodass Änderungen an einem Objekt auf dem anderen Objekt widergespiegelt werden
- Übergabe von Parametern
Die Parameter aller Funktionen in ECMAScript werden als Wert übergeben. Das bedeutet, dass Werte außerhalb der Funktion auf die Parameter innerhalb der Funktion kopiert werden, genau wie von einer Variablen auf eine andere. Wenn es sich um einen primitiven Wert handelt, ist es dasselbe wie die Kopie der ursprünglichen Wertvariablen. Wenn es sich um einen Referenzwert handelt, ist es dasselbe wie die Kopie der Referenzwertvariablen. Für viele Entwickler ist dieser Teil möglicherweise schwer zu verstehen. Schließlich kann auf Variablen über Werte und Referenzen zugegriffen werden, während Parameter nur über Werte übergeben werden können.
Bei der Übergabe von Parametern über Werte wird der Wert in einen lokalen Wert kopiert Eine Variable (d. h. ein benannter Parameter oder im ECMAScript-Sprachgebrauch ein Slot im Argumentobjekt). Wenn Parameter als Referenz übergeben werden, wird die Position des Werts im Speicher in einer lokalen Variablen gespeichert, was bedeutet, dass Änderungen an der lokalen Variablen außerhalb der Funktion widergespiegelt werden
- Bestimmen Sie den Typ
Der Typ des im vorherigen Kapitel erwähnten Operators ist am besten geeignet, um zu bestimmen, ob eine Variable vom primitiven Typ ist. Vielmehr ist es die beste Methode, um festzustellen, ob eine Variable eine Zeichenfolge, eine Zahl, ein boolescher Wert oder undefiniert ist. Wenn der Wert ein Objekt oder null ist, gibt typeof „object“ zurück.
Per Definition sind alle Referenzwerte Instanzen von Object , sodass jeder Referenzwert, der über den Operator „instanceof“ und den Object-Konstruktor erkannt wird, „true“ zurückgibt. Wenn Sie zum Erkennen eines Grundwerts „instanceof“ verwenden, wird ebenfalls immer „false“ zurückgegeben, da der Grundwert kein Objekt ist.
Beachten Sie, dass der Operator „typeof“ auch „Funktion“ zurückgibt, wenn er zum Erkennen von Funktionen verwendet wird. Bei Verwendung zur Erkennung regulärer Ausdrücke in Safari (bis Safari 5) und Chrome (bis Chrome 7) gibt typeof aufgrund von Implementierungsdetails auch „function“ zurück. ECMA-262 besagt, dass jedes Objekt, das die interne Methode [[Call]] implementiert, bei der Art der Erkennung „Funktion“ zurückgeben sollte. Da reguläre Ausdrücke in den oben genannten Browsern diese Methode implementieren, gibt typeof auch „function“ für reguläre Ausdrücke zurück. In IE und Firefox gibt typeof für reguläre Ausdrücke „object“ zurück.
4-2. Ausführungskontext und -umfang
Das Konzept des Ausführungskontexts (oben als „Kontext“ bezeichnet) ist in JavaScript sehr wichtig. Der Kontext einer Variablen oder Funktion bestimmt, auf welche Daten sie zugreifen kann und wie sie sich verhält. Jeder Kontext hat ein zugehöriges Variablenobjekt und
alle in diesem Kontext definierten Variablen und Funktionen existieren auf diesem Objekt. Obwohl auf das Variablenobjekt nicht über Code zugegriffen werden kann, wird es zur Verarbeitung von Daten im Hintergrund verwendet.
Der globale Kontext ist der äußerste Kontext. Abhängig von der Hostumgebung der ECMAScript-Implementierung kann das Objekt, das den globalen Kontext darstellt, unterschiedlich sein. Im Browser ist der globale Kontext das, was wir oft als Fensterobjekt bezeichnen (wird in Kapitel 12 ausführlich vorgestellt), sodass alle über
var definierten globalen Variablen und Funktionen zu Eigenschaften und Methoden des Fensterobjekts werden. Deklarationen der obersten Ebene mit let und const werden nicht im globalen Kontext definiert, haben aber die gleiche Auswirkung auf die Auflösung der Bereichskette. Der Kontext wird zerstört, nachdem sein gesamter Code ausgeführt wurde, einschließlich aller darauf definierten Variablen und Funktionen (der globale Kontext wird erst zerstört, wenn die Anwendung beendet wird, z. B. wenn die Webseite geschlossen oder der Browser beendet wird).
Jeder Funktionsaufruf hat seinen eigenen Kontext. Wenn der Codeausführungsfluss in eine Funktion eintritt, wird der Kontext der Funktion auf einen Kontextstapel verschoben. Nachdem die Funktion ausgeführt wurde, öffnet der Kontextstapel den Funktionskontext und gibt die Kontrolle an den vorherigen Ausführungskontext zurück. ECMAScript
Der Ausführungsfluss des Programms wird über diesen Kontextstapel gesteuert. Wenn der Code im Kontext ausgeführt wird, erstellt er eine Bereichskette variabler Objekte. Diese Bereichskette bestimmt die Reihenfolge, in der der Code auf jeder Kontextebene auf Variablen und Funktionen zugreift. Das variable Objekt des Kontexts, in dem der Code ausgeführt wird, steht immer am Anfang der Bereichskette. Wenn der Kontext eine Funktion ist, wird ihr Aktivierungsobjekt als Variablenobjekt verwendet. Das aktive Objekt verfügt zunächst nur über eine definierte Variable: Argumente. (Im globalen Kontext gibt es keine solche Variable.) Das nächste Variablenobjekt in der Bereichskette stammt aus dem enthaltenden Kontext und das nächste Objekt kommt aus dem enthaltenden Kontext danach. Und so weiter, bis der globale Kontext vorhanden ist. Das variable Objekt des globalen Kontexts ist immer das letzte variable Objekt der Bereichskette (der dritte Kontext des eval()-Aufrufs), aber es gibt auch andere Möglichkeiten, die Bereichskette zu erweitern. Bestimmte Anweisungen bewirken, dass am Anfang der Bereichskette vorübergehend ein Kontext hinzugefügt wird, der nach der Ausführung des Codes
Variablendeklaration
Nach ES6 hat die JavaScript-Variablendeklaration weltbewegende Veränderungen erfahren. Bis
ECMAScript 5.1 war var das einzige Schlüsselwort zum Deklarieren von Variablen. ES6 fügt nicht nur die Schlüsselwörter
let und const hinzu, sondern sorgt auch dafür, dass diese beiden Schlüsselwörter
var als erste Wahl bei weitem übertreffen.
Funktionsbereichsdeklaration mit var
Beim Deklarieren einer Variablen mit var wird die Variable automatisch dem nächstgelegenen Kontext hinzugefügt. Innerhalb einer Funktion ist der nächstgelegene Kontext der lokale Kontext der Funktion. In einer with-Anweisung ist der nächstgelegene Kontext auch der Funktionskontext. Wenn eine Variable initialisiert wird, ohne sie zu deklarieren, wird sie automatisch zum globalen Kontext hinzugefügtHinweis: Das Initialisieren einer Variablen ohne Deklaration ist ein sehr häufiger Fehler in der JavaScript-Programmierung und kann viele Probleme verursachen. Aus diesem Grund müssen Leser Variablen deklarieren, bevor sie sie initialisieren. Im strikten Modus führt das Initialisieren einer Variablen ohne Deklaration zu einem Fehler
注意:未经声明而初始化变量是JavaScript编程中一个非常常见的错误,会导致很多问题。为此,读者在初始化变量之前一定要先声明变量。在严格模式下,未经声明就初始化变量会报错
var 声明会被拿到函数或全局作用域的顶部,位于作用域中所有代码之前。这个现象叫作“提升”(hoisting)。提升让同一作用域中的代码不必考虑变量是否已经声明就可以直接使用。可是在实践中,提升也会导致合法却奇怪的现象,即在变量声明之前使用变量。使用 let 的块级作用域声明
ES6新增的 let 关键字跟 var 很相似,但它的作用域是块级的,这也是JavaScript中的新概念。块级作用域由最近的一对包含花括号 {} 界定。换句话说, if 块、 while 块、 function块,甚至连单独的块也是 let 声明变量的作用域。使用 const 的常量声明
除了 let ,ES6同时还增加了 const 关键字。使用 const 声明的变量必须同时初始化为某个值。一经声明,在其生命周期的任何时候都不能再重新赋予新值
注意 开发实践表明,如果开发流程并不会因此而受很大影响,就应该尽可能地多使用 const 声明,除非确实需要一个将来会重新赋值的变量。这样可以从根本上保证提前发现重新赋值导致的bug
Die Variablendeklaration wird an den Anfang der Funktion oder des globalen Bereichs verschoben, vor dem gesamten Code im Bereich. Dieses Phänomen wird als „Heben“ bezeichnet. Durch das Hochziehen kann Code im selben Bereich die Variable verwenden, ohne sich Gedanken darüber machen zu müssen, ob sie deklariert wurde. In der Praxis kann die Förderung jedoch auch zu dem legalen, aber seltsamen Phänomen führen, dass Variablen verwendet werden, bevor sie deklariert werden.
Verwenden Sie die Bereichsdeklaration „let“ auf Blockebene.
Das neue Schlüsselwort „let“ in ES6 ist var sehr ähnlich, sein Gültigkeitsbereich ist jedoch auf Blockebene, was ebenfalls ein neues Konzept in JavaScript ist. Der Bereich auf Blockebene wird durch das nächste Paar geschweifter Klammern {} begrenzt. Mit anderen Worten, wenn Blöcke, während Blöcke, Funktionsblöcke und sogar einzelne Blöcke den Umfang der deklarierten Variablen let umfassen. Verwenden Sie die const-Konstantendeklaration🎜 Zusätzlich zu let fügt ES6 auch das const-Schlüsselwort hinzu. Mit const deklarierte Variablen müssen ebenfalls auf einen Wert initialisiert werden. Sobald es deklariert ist, kann ihm zu keinem Zeitpunkt seines Lebenszyklus ein neuer Wert zugewiesen werden Verwenden Sie möglichst const-Deklarationen, es sei denn, Sie benötigen wirklich eine Variable, die in Zukunft neu zugewiesen wird. Dadurch kann grundsätzlich sichergestellt werden, dass durch Neuzuweisungen verursachte Fehler im Voraus entdeckt werden.🎜🎜🎜4-3JavaScript ist eine Sprache, die Garbage Collection verwendet, was bedeutet, dass die Ausführungsumgebung für die Speicherverwaltung verantwortlich ist Der Code wird ausgeführt. In Sprachen wie C und C++ stellt die Verfolgung der Speichernutzung eine große Belastung für Entwickler dar und ist die Ursache vieler Probleme. JavaScript entlastet Entwickler von dieser Belastung und implementiert die Speicherzuweisung und das Recycling ungenutzter Ressourcen durch automatische Speicherverwaltung. Die Grundidee ist einfach: Bestimmen Sie, welche Variable nicht mehr verwendet wird, und geben Sie den von ihr belegten Speicher frei. Dieser Prozess ist zyklisch, das heißt, das Garbage-Collection-Programm wird automatisch in bestimmten Intervallen ausgeführt (oder zu einem geplanten Sammelzeitpunkt während der Codeausführung). Der Garbage-Collection-Prozess ist eine ungefähre und unvollständige Lösung, denn ob ein bestimmter Speicherbereich noch nützlich ist, ist ein „unentscheidbares“ Problem, was bedeutet, dass es nicht durch Algorithmen gelöst werden kann. 🎜🎜Nehmen wir als Beispiel den normalen Lebenszyklus lokaler Variablen in einer Funktion. Lokale Variablen in einer Funktion sind vorhanden, wenn die Funktion ausgeführt wird. Zu diesem Zeitpunkt weist der Stapelspeicher (oder Heapspeicher) Speicherplatz zu, um den entsprechenden Wert zu speichern. Die Funktion verwendet intern Variablen und wird dann beendet. Zu diesem Zeitpunkt wird die lokale Variable nicht mehr benötigt und der von ihr belegte Speicher kann für die spätere Verwendung freigegeben werden. Es ist offensichtlich, dass lokale Variablen in diesem Fall nicht mehr benötigt werden, aber es ist nicht immer offensichtlich. Der Garbage Collector muss nachverfolgen, welche Variablen noch verwendet werden und welche nicht mehr verwendet werden, um Speicher zurückzugewinnen. Es kann unterschiedliche Implementierungen zum Markieren nicht verwendeter Variablen geben. In der Geschichte der Browserentwicklung wurden jedoch hauptsächlich zwei Markup-Strategien verwendet: Markup-Bereinigung und Referenzzählung. 🎜Mark Sweep
Die am häufigsten verwendete Garbage-Collection-Strategie in JavaScript ist Mark-and-Sweep. Wenn eine Variable in den Kontext eintritt, beispielsweise durch die Deklaration einer Variablen innerhalb einer Funktion, wird die Variable als im Kontext vorhanden markiert. Variablen, die sich nicht im Kontext befinden, sollten logischerweise niemals ihren Speicher freigeben, da sie verwendet werden können, solange der Code im Kontext ausgeführt wird. Wenn eine Variable den Kontext verlässt, wird sie auch als den Kontext verlassend markiert.
Es gibt viele Möglichkeiten, Variablen zu kennzeichnen. Wenn beispielsweise eine Variable in den Kontext eintritt, können Sie ein bestimmtes Bit invertieren. Alternativ können Sie zwei Listen mit Variablen „im Kontext“ und „nicht im Kontext“ verwalten und Variablen von einer Liste in die andere verschieben. Die Umsetzung des Markierungsprozesses ist nicht wichtig, der Schlüssel liegt in der Strategie.
Wenn das Garbage-Collection-Programm ausgeführt wird, markiert es alle im Speicher gespeicherten Variablen (denken Sie daran, dass es viele Möglichkeiten zum Markieren gibt). Anschließend werden die Tags von allen Variablen im Kontext sowie von Variablen entfernt, auf die von Variablen im Kontext verwiesen wird. Nach diesem Punkt markierte Variablen sind zu löschen, da sie für keine Variablen im Kontext mehr zugänglich sind. Anschließend führt der Garbage Collector eine Speicherbereinigung durch, bei der alle markierten Werte zerstört und deren Speicher zurückgefordert werden.
Im Jahr 2008 verwendeten IE, Firefox, Opera, Chrome und Safari alle die Markup-Bereinigung (oder eine Variante davon) in ihren JavaScript-Implementierungen und unterschieden sich nur darin, wie oft sie die Garbage Collection durchführten.Referenzzählung
Eine weitere, weniger häufig verwendete Garbage-Collection-Strategie ist die Referenzzählung. Die Idee besteht darin, für jeden Wert aufzuzeichnen, wie oft auf ihn verwiesen wurde. Wenn Sie eine Variable deklarieren und ihr einen Referenzwert zuweisen, ist die Referenznummer dieses Werts 1. Wird derselbe Wert einer anderen Variablen zugewiesen, erhöht sich die Referenznummer um 1. Wenn die Variable, die eine Referenz auf den Wert enthält, durch einen anderen Wert überschrieben wird, wird der Referenzzähler entsprechend um eins dekrementiert. Wenn die Anzahl der Verweise auf einen Wert 0 beträgt, bedeutet dies, dass auf den Wert nicht mehr zugegriffen werden kann, sodass sein Speicher sicher zurückgewonnen werden kann. Das Garbage-Collection-Programm
gibt den Speicher bei der nächsten Ausführung mit der Referenznummer 0 frei. Die Referenzzählung wurde erstmals von Netscape Navigator 3.0 übernommen, stieß jedoch bald auf ein ernstes Problem: Zirkelverweise. Der sogenannte Zirkelverweis bedeutet, dass Objekt A einen Zeiger hat, der auf Objekt B zeigt, und Objekt B auch auf Objekt A verweist.
- Das Setzen einer Variablen auf Null trennt tatsächlich die Beziehung zwischen der Variablen und ihrem zuvor referenzierten Wert. Wenn das Garbage-Collection-Programm das nächste Mal ausgeführt wird, werden diese Werte gelöscht und der Speicher wiederhergestellt.
Um dies zu beheben, hat IE9 sowohl BOM- als auch DOM-Objekte in JavaScript-Objekte umgewandelt. Dadurch werden auch Probleme vermieden, die durch die Existenz zweier Sätze von Garbage-Collection-Algorithmen verursacht werden, und eliminiert häufige Speicherlecks.
- Speicherleck
Schlecht geschriebenes JavaScript kann unter subtilen und schädlichen Speicherlecks leiden. Speicherlecks können auf Geräten mit begrenztem Speicher oder in Situationen, in denen Funktionen häufig aufgerufen werden, ein großes Problem darstellen. Die meisten Speicherverluste in JavaScript werden durch unangemessene Referenzen verursacht
待更新。。。
Verwandte kostenlose Lernempfehlungen: Javascript (Video)
Das obige ist der detaillierte Inhalt vonNotieren Sie sich Notizen zum JavaScript-Lernen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen

Dieser Artikel zeigt die Frontend -Integration mit einem Backend, das durch die Genehmigung gesichert ist und eine funktionale edtech SaaS -Anwendung unter Verwendung von Next.js. erstellt. Die Frontend erfasst Benutzerberechtigungen zur Steuerung der UI-Sichtbarkeit und stellt sicher, dass API-Anfragen die Rollenbasis einhalten

JavaScript ist die Kernsprache der modernen Webentwicklung und wird für seine Vielfalt und Flexibilität häufig verwendet. 1) Front-End-Entwicklung: Erstellen Sie dynamische Webseiten und einseitige Anwendungen durch DOM-Operationen und moderne Rahmenbedingungen (wie React, Vue.js, Angular). 2) Serverseitige Entwicklung: Node.js verwendet ein nicht blockierendes E/A-Modell, um hohe Parallelitäts- und Echtzeitanwendungen zu verarbeiten. 3) Entwicklung von Mobil- und Desktop-Anwendungen: Die plattformübergreifende Entwicklung wird durch reaktnative und elektronen zur Verbesserung der Entwicklungseffizienz realisiert.

Zu den neuesten Trends im JavaScript gehören der Aufstieg von Typenkripten, die Popularität moderner Frameworks und Bibliotheken und die Anwendung der WebAssembly. Zukunftsaussichten umfassen leistungsfähigere Typsysteme, die Entwicklung des serverseitigen JavaScript, die Erweiterung der künstlichen Intelligenz und des maschinellen Lernens sowie das Potenzial von IoT und Edge Computing.

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

Python eignet sich besser für Datenwissenschaft und maschinelles Lernen, während JavaScript besser für die Entwicklung von Front-End- und Vollstapel geeignet ist. 1. Python ist bekannt für seine prägnante Syntax- und Rich -Bibliotheks -Ökosystems und ist für die Datenanalyse und die Webentwicklung geeignet. 2. JavaScript ist der Kern der Front-End-Entwicklung. Node.js unterstützt die serverseitige Programmierung und eignet sich für die Entwicklung der Vollstapel.

JavaScript erfordert keine Installation, da es bereits in moderne Browser integriert ist. Sie benötigen nur einen Texteditor und einen Browser, um loszulegen. 1) Führen Sie sie in der Browser -Umgebung durch, indem Sie die HTML -Datei durch Tags einbetten. 2) Führen Sie die JavaScript -Datei nach dem Herunterladen und Installieren von node.js nach dem Herunterladen und Installieren der Befehlszeile aus.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

Dreamweaver Mac
Visuelle Webentwicklungstools

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version