Heim >Web-Frontend >js-Tutorial >Javascript-Kernleseausdrücke und Operatoren_Grundkenntnisse
Ein Ausdruck ist eine Phrase in JavaScript, die der JavaScript-Interpreter zu einem Ergebnis berechnet. Der einfachste Ausdruckstyp, der üblicherweise in Programmen verwendet wird, sind Variablen. Ein Variablenname ist ebenfalls ein einfacher Ausdruck und sein Wert ist der der Variablen zugewiesene Wert.
Komplexe Ausdrücke bestehen aus einfachen Ausdrücken. Ein Array-Zugriffsausdruck besteht beispielsweise aus einem Ausdruck, der ein Array darstellt, eckigen Klammern und einem ganzzahligen Ausdruck. Das Ergebnis des neuen Ausdrucks, den sie bilden, ist der Wert des Elements an einer bestimmten Position im Array. Gleicher Buchstabe
Der Nummernaufrufausdruck besteht aus einem Ausdruck, der ein Funktionsobjekt darstellt, und 0 Ausdrücken mit mehreren Parametern. Die gebräuchlichste Methode, einfache Ausdrücke zu komplexen Ausdrücken zu kombinieren, sind Operatoren.
In diesem Kapitel (diesem Artikel) werden alle Javascript-Operatoren erläutert. Es erklärt auch Ausdrücke, die keine Operatoren beinhalten (z. B. den Zugriff auf Array-Elemente und Funktionsaufrufe). Seine Syntax und sein Programmierstil sind der C-Sprache sehr ähnlich.
1. Elementausdruck
Die einfachsten Ausdrücke sind „primitive Ausdrücke“, also die kleinsten Ausdruckseinheiten – sie enthalten keine anderen Ausdrücke. Primitive Ausdrücke in JavaScript enthalten Konstanten oder Literale. Schlüsselwörter und Variablen.
Direkte Größen sind konstante Werte, die direkt im Programm erscheinen. Sie sehen aus wie:
Objekt- und Array-Initialisierung sind eigentlich neu erstellte Objekte und Arrays. Diese Initialisierungsausdrücke werden manchmal als „Objektliterale“ und „Array-Literale“ bezeichnet. Im Gegensatz zu booleschen Literalen handelt es sich jedoch nicht um primitive Ausdrücke, da die darin enthaltenen Mitglieder oder Elemente Unterausdrücke sind.
Die Syntax des Initialisierungsausdrucks eines Arrays ist sehr einfach. Beginnen wir mit dem folgenden
Der Initialisierungsausdruck des Arrays besteht aus einem Paar eckiger Klammern und einer durch Kommas getrennten Liste. Das Initialisierungsergebnis ist ein neu erstelltes Array. Die Elemente des Arrays sind die Werte eines durch Kommas getrennten Ausdrucks.
[] //Ein leeres Array; wenn es innerhalb von [] leer bleibt, bedeutet das, dass das Array keine Elemente enthält
[1 2,3 4] //Array mit zwei Elementen, das erste ist 3, das zweite ist 7
Ein Elementinitialisierungsausdruck in einem Array-Initialisierungsausdruck kann ein Array-Initialisierungsausdruck sein. Mit anderen Worten: Ausdrücke können verschachtelt werden
Vier der Elemente sind undefiniert. Wenn Sie am Ende des Array-Literals ein Komma belassen, wird kein neues Element mit dem Wert undefiniert erstellt.
Objektinitialisierungsausdrücke sind den Array-Initialisierungsausdrücken sehr ähnlich, mit der Ausnahme, dass die eckigen Klammern durch geschweifte Klammern ersetzt werden. Und jeder Unterausdruck enthält einen Eigenschaftsnamen und ein Nicht-Doppelpunkt als Präfix.
Objektliterale können auch verschachtelt werden, z. B.
3. Funktionsausdruck
Funktionsdefinitionsausdruck definiert eine Javascript-Funktion. Der Wert des Ausdrucks ist diese neu definierte Funktion. In gewissem Sinne können Funktionsdefinitionsausdrücke zu Funktionsliteralen werden, und Funktionsausdrücke können als „Funktionsliterale“ bezeichnet werden. Schließlich werden Objektinitialisierungsausdrücke auch als „Objektliterale“ bezeichnet. Ein typischer Funktionsdefinitionsausdruck enthält das Schlüsselwort function, gefolgt von einem Klammerpaar. Innerhalb der Klammern befindet sich eine durch Kommas getrennte Liste mit 0 oder mehr Bezeichnern (Parameternamen). Folgen Sie dann dem JavaScript-Codesegment (Funktionskörper), das in geschweifte Klammern eingeschlossen ist.var quadrat = function(x){ return x*x};
Funktionsdefinitionsausdrücke können auch den Namen der Funktion enthalten. Anstelle von Funktionsausdrücken können Funktionen auch über Funktionsanweisungen definiert werden. Weitere Details werden in Kapitel 8 beschrieben.
4. Attributzugriffsausdruck
Der Attributzugriffsausdrucksvorgang ruft den Wert eines Objekts oder eines Array-Elements ab. JavaScript definiert zwei Methoden für den Zugriff auf Eigenschaften.
Kapitel 2 wird in eckigen Klammern geschrieben und in den eckigen Klammern steht ein Ausdruck (diese Methode gilt für Objekte und Arrays). Der zweite Ausdruck gibt den Index der Eigenschaft an, auf die zugegriffen werden soll, oder stellt den Index des Array-Elements dar, auf das zugegriffen werden soll. Hier einige konkrete Beispiele
Unabhängig davon, welche Form des Attributzugriffsausdrucks verwendet wird, werden Ausdrücke vor „.“ und „[“ immer zuerst ausgewertet. Wenn der Ausdruck null oder undefiniert ergibt, löst der Ausdruck eine TypeError-Ausnahme aus, da keiner der Werte Eigenschaften enthalten kann. Wenn das Operationsergebnis kein Objekt oder Array ist, konvertiert JavaScript es in ein Objekt (Kapitel 3, Abschnitt 6)
Obwohl .identifier einfacher zu schreiben ist, sollte beachtet werden, dass diese Methode nur anwendbar ist, wenn der Attributname, auf den zugegriffen werden soll, ein gültiger Bezeichner ist. Und Sie müssen den Namen des Attributs kennen, auf das zugegriffen werden soll. Wenn der Eigenschaftsname ein reserviertes Wort ist, Leerzeichen und Satzzeichen enthält oder eine Zahl (für Arrays) ist, muss er in eckigen Klammern geschrieben werden. Wenn es sich bei dem Attributnamen um einen durch einen Operator ermittelten Wert und nicht um einen festen Wert handelt, müssen eckige Klammern verwendet werden. (Kapitel 6, Vers 2, Abschnitt 1)
5. Bewegungsausdruck
Der Aufrufausdruck in JavaScript ist eine grammatikalische Darstellung des Aufrufs (oder der Ausführung) einer Funktion oder Methode. Es beginnt mit einem Funktionsausdruck, der auf die aufzurufende Funktion verweist. Auf einen Funktionsausdruck folgt ein Klammerpaar, das eine durch Kommas getrennte Liste von Parametern enthält. Es können 0 oder mehr Parameter vorhanden sein.
f(0) //f ist ein Funktionsausdruck: 0 ist ein Parameterausdruck.
Math.max(x,y,z) //Math.max ist eine Funktion; x, y und z sind Parameter
a.sort() //a.sort() ist eine Funktion, sie hat keine Parameter.
Wenn ein Ausdruck zur Auswertung aufgerufen wird, wird zunächst der Funktionsausdruck und dann der Parameterausdruck ausgewertet, um einen Satz Parameterwerte zu erhalten. Wenn der Wert des Funktionsausdrucks kein aufrufbares Objekt ist, wird eine Typfehlerausnahme ausgelöst. Anschließend werden die Werte der Parameter wiederum den formalen Parametern zugewiesen, die bei der Definition der Funktion definiert werden. Als nächstes führen Sie den Funktionskörper aus. Wenn die Funktion die Return-Anweisung verwendet, um einen Rückgabewert zurückzugeben, ist der Rückgabewert der Wert des gesamten aufrufenden Ausdrucks. Andernfalls ist der Wert des aufrufenden Ausdrucks undefiniert. Einzelheiten zu Funktionsaufrufen – einschließlich dessen, was passiert, wenn die Anzahl der formalen Parameterausdrücke nicht mit der Anzahl der tatsächlichen Parameter in der Funktionsdefinition übereinstimmt – werden in Kapitel 8 ausführlich erläutert.
Jeder Aufrufausdruck enthält ein Klammerpaar und den Ausdruck vor der linken Klammer. Wenn der Ausdruck ein Eigenschaftszugriffsausdruck ist, wird der Aufruf als „Methodeninviation“ bezeichnet. Wenn der Funktionskörper in einem Methodenaufruf ausgeführt wird, sind die Objekte und Arrays, die als Attribute für den Zugriff auf den Körper verwendet werden, die Punkte davon in der aufrufenden Methode. Diese Eigenschaft ermöglicht es einer Funktion (deren OO-Name eine „Methode“ ist), ihr Hostobjekt im objektorientierten Programmierparadigma aufzurufen (mehr dazu in Kapitel 9).
6. Objekterstellungsausdruck
Der Objekterstellungsausdruck erstellt ein Objekt und ruft eine Funktion (Konstruktor) auf, um die Eigenschaften des Objekts zu initialisieren. Objekterstellungsausdrücke sind den Funktionsaufrufausdrücken sehr ähnlich, mit der Ausnahme, dass vor dem Objekterstellungsausdruck ein zusätzliches Schlüsselwort new:
steht. neues Objekt()
neuer Punkt(2,3)
Wenn für den Objekterstellungsausdruck keine Parameter an den Konstruktor übergeben werden müssen, kann dieses Klammerpaar weggelassen werden. Weitere Einzelheiten zum Konstruktor werden in Kapitel 9 erläutert
neues Objekt
neuer Punkt
7. Betreiberübersicht
Operatoren in JavaScript werden für Tabellenausdrücke, Vergleichsausdrücke, logische Ausdrücke, Zuweisungsausdrücke usw. verwendet.
Es ist zu beachten, dass die meisten Operatoren durch Satzzeichen dargestellt werden, z. B. „delete“ und „instanceof“. Unabhängig davon, ob es sich um Schlüsselwortoperatoren oder symbolische Operatoren handelt, sind die dargestellten Operatoren alle reguläre Operatoren und ihre Syntax ist sehr prägnant und umfassend.
Sortiert nach der Rangfolge der tiefgestellten Operatoren ist die Rangfolge des Operators höher als die Rangfolge des letztgenannten Operators. Durch horizontale Skalare getrennte Operatoren haben unterschiedliche Priorität.
A repräsentiert die Assoziativität des Operators.
L von links nach rechts oder R (von rechts nach links)
Die Liste mit Header N repräsentiert die Anzahl der Operanden.
Der Typ gibt den Typ der erwarteten Operanden und den Ergebnistyp des Operators (nach dem „→“-Symbol)
Betreiber | Bedienung | A | N | Typ |
Vor-/Nach-Inkrement | R | 1 | lval→num | |
-- | Abnahme vor und nach | R | 1 | lval→num |
- | Umkehren | R | 1 | Anzahl→Anzahl |
In Zahl umwandeln | R | 1 | Anzahl→Anzahl | |
~ | Bitweise Negation | R | 1 | int→int |
! | Logisches NICHT | R | 1 | bool→bool |
Löschen | Attribute löschen | R | 1 | lval→bool |
Typ | Vorgangstyp erkennen | R | 1 | any→Str |
nichtig | Undefinierten Wert zurückgeben | R | 1 | any→undef |
*,/,% | Multiplizieren und dividieren Sie, um den Rest zu ermitteln | L | 2 | num, num→num |
, - | Addieren, subtrahieren | L | 2 | num, num→num |
String-Verkettung | L | 2 | str, str→str | |
<< | Linksverschiebung | L | 2 | int, int→int |
>> | Nach rechts verschieben | L | 2 | int, int→int |
>>> | Rechtsverschiebung ohne Vorzeichen |
L |
2 | int, int→int |
<, <=, >, >= | Zahlenreihenfolge vergleichen | L | 2 | num,num→bool |
<, <=, >, >= | Vergleichen Sie die Reihenfolge in Buchstaben | L | 2 | str, str→bool |
instanceof | Testobjektklasse | L | 2 | obj, func→bool |
in | Testen Sie, ob das Attribut vorhanden ist | L | 2 | str,obj→bool |
== | Gleichheitsurteil | L | 2 | any, any→bool |
! = | Ungleiches Urteilsvermögen | L | 2 | any, any→bool |
=== | Richteridentität | L | 2 | any, any→bool |
! == | Nicht-Identität beurteilen | L | 2 | any, any→bool |
& | Bitweises UND | L | 2 | int, int→int |
^ | Bitweises XOR | L | 2 | int, int→int |
| | Bitweises ODER | L | 2 | int, int→int |
&& | Logisches UND | L | 2 | beliebig, beliebig→beliebig |
|| | Logisches ODER | L | 2 | beliebig, beliebig→beliebig |
?: | Bedingter Operator | R | 3 | bool, any, any→any |
= | Variablenzuweisung oder Objekteigenschaftenzuweisung | R | 2 | lval, beliebig→beliebig |
*= /= %= = -= &= ^= |= <<= >>= >>>= |
Bedienung und Einsatz | R | 2 | lval, beliebig→beliebig |
, |
Ignorieren Sie den ersten Operanden, Gibt den zweiten Operanden zurück. |
L | 2 | beliebig, beliebig→beliebig |
i. Anzahl der Operanden
Operatoren können nach der Anzahl der Operanden klassifiziert werden.
Die meisten Operatoren in JavaScript sind binäre Operatoren, die zwei Ausdrücke zu einem etwas komplexeren Ausdruck kombinieren.
JavaScript unterstützt auch einige unäre Operatoren, die einen Ausdruck in einen anderen, etwas komplexeren Ausdruck umwandeln. Der „-“-Operator im Ausdruck -x ist ein unärer Operator. ist, den negativen Wert von x anzunehmen.
JavaScript unterstützt einen ternären Operator: den bedingten Beurteilungsoperator „?:“, der drei Ausdrücke zu einem Ausdruck
ii. Operandentyp und Ergebnistyp
Einige Operatoren können für jeden Datentyp verwendet werden, es wird jedoch weiterhin erwartet, dass Sie mit Daten eines bestimmten Typs arbeiten.
iii. Linker Wert
Der Zuweisungsoperator und einige andere Operatoren in der Tabelle erwarten, dass ihre Operanden vom Typ lval sind, wobei lvalue ein veralteter Begriff ist. Das bedeutet: „Ein Ausdruck kann nur auf der linken Seite eines Zuweisungsoperators erscheinen.“ In JavaScript sind Variablen, Objekteigenschaften und Array-Elemente allesamt L-Werte. Die ECMAScript-Spezifikation ermöglicht es integrierten Funktionen mit Gültigkeitsbereich, einen L-Wert zurückzugeben, definierte Funktionen hingegen nicht.
iiii. Priorität der Betreiber
In der obigen Tabelle sind die angezeigten Operatoren von hoher zu niedriger Priorität geordnet, und eine Gruppe von Operatoren innerhalb jeder horizontalen Trennlinie hat die gleiche Priorität. Die Operatorpriorität steuert die Reihenfolge, in der Operatoren ausgeführt werden. Operatoren mit höherer Priorität (oben in der Tabelle) werden immer vor Operatoren mit niedrigerer Priorität (unten in der Tabelle) ausgeführt.
Sehen Sie sich den folgenden Ausdruck an
w=x y*z;
Der Multiplikationsoperator „*“ hat eine höhere Priorität als die Addition „ “, daher wird die Multiplikation zuerst ausgeführt. Dann hat der Zuweisungsoperator „=“ die niedrigste Priorität. Daher wird die Zuweisungsoperation ausgeführt, nachdem der Ausdruck auf der rechten Seite ausgewertet wurde.
Die Rangfolge der Operatoren kann mithilfe von Klammern angegeben werden. Der obige Ausdruck kann wie folgt geschrieben werden.
w = (x y) * z;
Beachten Sie, dass Eigenschaftszugriffsausdrücke und Aufrufausdrücke eine höhere Priorität haben als alle Operatoren in der Tabelle.
Typ meiner.Funktion[x](y)
Obwohl „typeof“ einer der Operatoren mit der höchsten Priorität ist, wird „typeof“ auch nach zwei Eigenschaftszugriffen und Funktionsaufrufen ausgeführt.
Wenn Sie sich wirklich nicht sicher sind, welche Priorität die von Ihnen verwendeten Operatoren haben, ist es am einfachsten, Klammern zu verwenden, um die Reihenfolge der Operationen zu erzwingen. Es sind einige wichtige Regeln zu beachten: Multiplikation und Division sind höher als Addition und Subtraktion, und Zuweisungsoperationen haben eine sehr niedrige Priorität und werden normalerweise zuletzt ausgeführt.
iiiiii. Assoziativität von Operatoren
In diesem Abschnitt der Tabelle beschreibt die Spalte mit dem Titel A die Nodularität des Operators. L bedeutet von links nach rechts kombinieren, R bedeutet von rechts nach links kombinieren. Tuberculity gibt die Reihenfolge der Operationen in mehreren Operatorausdrücken mit derselben Priorität an.
Zum Beispiel werden Subtraktionsoperationen assoziativ von links nach rechts ausgeführt.
Entspricht diesem Code:
Umgekehrt der folgende Ausdruck:
Genau das Gleiche wie dieser Code
Weil unäre Operatoren, Zuweisungen und ternäre bedingte Operatoren alle von rechts nach links assoziativ sind.
iiiiiii.Reihenfolge der Operationen
Die Rangfolge und Assoziativität von Operatoren geben ihre Reihenfolge der Operationen im Zuweisungsausdruck an, geben jedoch nicht die Reihenfolge der Operationen im Berechnungsprozess von Unterausdrücken an. JavaScript wertet Ausdrücke immer streng von links nach rechts aus, zum Beispiel:
Im Ausdruck w=x y*z wird zuerst der Ausdruck w berechnet und dann werden x, y und z berechnet. Anschließend wird der Wert von y mit z multipliziert und der Wert von x addiert. Schließlich die Variable oder das Attribut, auf das der Ausdruck w zeigt. Durch das Hinzufügen von Klammern zu einem Ausdruck ändert sich die Beziehung zwischen Multiplikations-, Additions- und Zuweisungsoperationen. Aber die Reihenfolge von links nach rechts wird sich nicht ändern.
8. Arithmetische Ausdrücke
In diesem Abschnitt werden Operatoren behandelt, die arithmetische Berechnungen durchführen, sowie arithmetische Operationen an Operanden. Die Multiplikations-, Divisions- und Subtraktionsoperatoren sind sehr einfach. Die Additionsoperation ist ein separater Abschnitt, da der Additionsoperator die Verkettung von Zeichenfolgen durchführen kann und seine Typkonvertierung etwas Besonderes ist.
Die grundlegenden arithmetischen Operatoren sind *, /, %, , -. Mit Ausnahme der Addition sind andere Operatoren sehr einfach. Sie wandeln die Operatoren bei Bedarf einfach in Zahlen um und berechnen dann das Produkt, den Quotienten, den Rest (Modul) und die Differenz. Alle Operationen, die nicht in Zahlen umgewandelt werden können, werden in NaN-Werte umgewandelt. Wenn der Operand (oder das Konvertierungsergebnis) ein NaN-Wert ist, ist das Ergebnis der arithmetischen Operation ebenfalls NaN
Der Operator „/“ dividiert den zweiten Operanden durch den ersten Operanden, wenn Sie Programmiersprachen verwendet haben, die zwischen Ganzzahlen und Gleitkommazahlen unterscheiden. Wenn man dann eine ganze Zahl durch eine ganze Zahl dividiert, ist das gewünschte Ergebnis ebenfalls eine ganze Zahl. Alle Zahlen in JavaScript sind vom Typ Gleitkomma, und die Ergebnisse von Divisionsoperationen sind ebenfalls vom Typ Gleitkomma. Das Ergebnis von 5/2 ist beispielsweise 2,5 und nicht 2. Das Ergebnis einer Operation, die durch 0 dividiert, ist positiv unendlich oder negativ unendlich. Und das Ergebnis von 0/0 ist NaN. Alle diese Vorgänge sind fehlerfrei.
Der Operator „%“ berechnet den Modulus des ersten Operanden zum zweiten Operanden. Mit anderen Worten, es ist der Rest des ersten Operanden dividiert durch den zweiten Operanden. Das Vorzeichen des Ergebnisses bleibt das gleiche wie das Vorzeichen des ersten Operanden (des Dividenden). Beispielsweise ist das Ergebnis von 5 %2 1 und das Ergebnis von -5 %2 ist -1.
Die Operanden des Restoperators sind normalerweise Ganzzahlen, sie funktionieren aber auch mit Gleitkommazahlen. 6,5 %2,1 ergibt 0,2. (0,19999999999999973)
i. " " Operator
Der binäre Additionsoperator „ “ kann zwei Zahlen addieren und auch Zeichenfolgenverkettungsoperationen durchführen:
Wenn beide Operanden Zahlen oder Zeichenfolgen sind, ist das Berechnungsergebnis offensichtlich. In anderen Fällen müssen jedoch einige notwendige Typkonvertierungen durchgeführt werden. Und das Verhalten des Operators hängt vom Ergebnis der Typkonvertierung ab. Technisch gesehen verhält sich der Additionsoperator so:
Wenn ein Operand ein Objekt ist, wird das Objekt gemäß den Konvertierungsregeln für Objekte in primitive Werte in einen primitiven Klassenwert konvertiert (siehe Kapitel 3, Abschnitt 8, Abschnitt 3). Datumsangaben werden von der toString()-Methode von Objekten konvertiert, und andere Objekte werden von der valueOf()-Methode konvertiert (sofern die valueOf()-Methode einen primitiven Wert zurückgibt). Da für die meisten Objekte keine valueOf()-Methode verfügbar ist, führen sie die Erfassung und Ersetzung durch die toString()-Methode
durch
Wenn nach der Konvertierung des Objekts in einen primitiven Wert einer der Operanden eine Zeichenfolge ist, wird auch der andere Operand in eine Zeichenfolge konvertiert. Führen Sie dann eine Zeichenfolgenverkettung durch.
Andernfalls werden beide Operanden in Zahlen (oder NaN) umgewandelt und die Additionsoperation ausgeführt.
Hier sind einige Beispiele
Zum Schluss noch etwas Besonderes zu beachten. Wenn die Additionsoperation mit Zeichenfolgen verwendet wird, muss die Auswirkung der Addition auf die Reihenfolge der Operationen berücksichtigt werden. Mit anderen Worten: Das Ergebnis der Operation hängt von der Reihenfolge der Operationen der Operatoren ab, beispielsweise
ii. Unärer Operator
Unäre Operatoren wirken auf einen einzelnen Operanden. und einen neuen Wert schaffen. In JavaScript haben unäre Operatoren eine hohe Priorität und sind rechtsassoziativ. In diesem Abschnitt werden die unären Operatoren ( ,- und --) beschrieben, die Operationen bei Bedarf in Zahlen umwandeln. Es ist zu beachten, dass - ein unärer und ein binärer Operator ist,
Ein Dollar zusätzlich
Der unäre Additionsoperator wandelt die Operandennummer in eine Zahl (oder NaN) um und gibt die umgewandelte Zahl zurück. Ist der Operand selbst eine Zahl, wird diese Zahl direkt zurückgegeben.
Abzug um einen Dollar-
Wenn das - Zeichen als unärer Operator verwendet wird, werden die Operanden nach Bedarf in Zahlen umgewandelt und dann das Vorzeichen des Operationsergebnisses geändert
Inkrement
Der Inkrement-Operator „ “ führt eine Inkrementierungsoperation (1) für seinen Operanden aus, der ein L-Wert (Variable, Array-Element oder Objektattribut) ist. Operatoren wandeln Operanden in Zahlen um. Fügen Sie dann 1 zur Zahl hinzu und weisen Sie den hinzugefügten Wert einer Variablen, einem Array-Element oder einer Objekteigenschaft zu.
Inkrementieren Der Rückgabewert einer Operation hängt von der Position ihrer Operanden ab.
Wenn der Operator vor dem Operanden steht, wird er als „Vorinkrement“-Operator bezeichnet. Er führt inkrementelle Berechnungen für den Operanden durch und gibt den berechneten Wert zurück.
Wenn der Operator hinter dem Operanden steht, wird er als „Post-Inkrement“-Operator bezeichnet. Er führt eine inkrementelle Berechnung für den Operanden durch, gibt jedoch einen nicht inkrementierten Wert zurück. Wie zum Beispiel
var i = 1,j = i //Die Werte von i und j sind beide 2
var i = 1,j = i; //i ist 2, j ist 1
Es ist zu beachten, dass der Operator „ “ genau wie x und sum x=x 1 niemals eine Zeichenfolgenverkettung durchführt, sondern den Operanden immer in eine Zahl umwandelt und diese um 1 erhöht. Wenn x die Zeichenfolge „1“ ist, ist das Ergebnis von x ist die Zahl 2 und x 1 ist die Zeichenfolge „11“
Die Operationsmethode zum Dekrementieren und Inkrementieren ist dieselbe. Sie wandelt den Operanden in ein Array um und verringert es dann um 1.
iii. Bitoperatoren
Bitweise Operatoren können bitweise Operationen auf niedrigerer Ebene an Binärdaten durchführen, die durch Zahlen dargestellt werden. Obwohl es sich nicht um herkömmliche rein mathematische Operationen handelt, werden sie hier als arithmetische Operatoren klassifiziert, da sie mit numerischen Typen arbeiten und Zahlen zurückgeben. Diese Operatoren sind in JavaScript ungewöhnlich. (Hier nicht beschrieben, Einzelheiten finden Sie bei Baidu ~-~)
9. Relationale Ausdrücke
In diesem Abschnitt werden die relationalen Operatoren von JavaScript beschrieben. Die relationalen Operatoren werden verwendet, um die Beziehung zwischen zwei Werten (gleich, kleiner als oder „ist ein Attribut von …“) zu testen und je nachdem „wahr“ und „falsch“ zurückzugeben ob die Beziehung existiert. Relationale Ausdrücke werden normalerweise in if while- oder for-Anweisungen (Kapitel 5) verwendet, um den Ausführungsfluss des Programms zu steuern.In den nächsten Abschnitten geht es um Gleichheits- und Ungleichheitsoperationen, Vergleichsoperatoren und die anderen beiden relationalen Operatoren in und Instanz von in JavaScript
iGleichheits- und Ungleichheitsoperatoren
Die Operatoren „==" und „===" werden verwendet, um zu vergleichen, ob zwei Werte gleich sind. Die beiden Operatoren ermöglichen jede Art von Operator. Gibt „true“ zurück, wenn sie gleich sind, andernfalls wird „false“ zurückgegeben. „===“ wird auch als strikter Gleichheitsoperator (manchmal auch als Identitätsoperator bezeichnet) bezeichnet, der verwendet wird, um zu erkennen, ob zwei Operanden strikt gleich sind. Der Operator „==“ wird als Gleichheitsoperator bezeichnet und dient zur Prüfung, ob zwei Operanden gleich sind. Die Definition von Gleichheit ist hier locker und ermöglicht eine Typkonvertierung.Javascript unterstützt die Operatoren „=", „==", „===". Sie sollten den Unterschied zwischen (Zuweisungs-, Gleichheits-, Identitäts-)Operatoren verstehen. Und verwenden Sie es beim Programmieren mit Vorsicht. Um Verwirrung zu vermeiden, sollte „=“ „Abrufen oder Zuweisen“ heißen, „==“ sollte „Gleichheit“ heißen und „===“ sollte „strenge Gleichheit“ heißen.
Die Operatorregeln „!=" und „!==" sind „==", die Negation des Operators „===" ist ein boolescher Nicht-Operator, wir werden „!=", „ !==" heißt Ungleichheit, nicht strikte Gleichheit
Der Vergleich von JavaScript-Objekten ist ein Referenzvergleich, kein Wertevergleich. Das Objekt ist sich selbst gleich, aber weder die Person noch das Objekt sind gleich. Wenn zwei Objekte die gleiche Anzahl an Eigenschaften, die gleichen Eigenschaftsnamen und -werte haben, sind sie immer noch nicht gleich. Selbst wenn die Array-Elemente an entsprechenden Positionen gleich sind, sind die beiden Arrays auch ungleich.
Der strikte Gleichheitsoperator „===" berechnet zunächst den Wert des Operanden und vergleicht dann die beiden Werte ohne Typkonvertierung.
Wenn zwei Werttypen nicht gleich sind, sind sie nicht gleich
Wenn beide Werte null oder undefiniert sind, sind sie nicht gleich
Wenn beide Werte boolesch wahr oder falsch sind, dann sind sie gleich
Wenn einer der Werte NaN ist oder beide Werte NaN sind, sind sie nicht gleich zu anderen Werten, einschließlich sich selbst.
Zwei Werte sind gleich, wenn sie Zahlen sind und gleich sind. Wenn ein Wert 0 und ein Wert -0 ist, sind sie ebenfalls gleich.
Zwei Werte sind gleich, wenn sie Zeichenfolgen sind und in entsprechenden Bits genau die gleichen 16 Ziffern enthalten (siehe Kapitel 3, Abschnitt 2). Wenn sie sich in Länge oder Inhalt unterscheiden, sind sie nicht gleich. Zwei Zeichenfolgen funktionieren möglicherweise genau gleich und zeigen dieselben Zeichen an, haben jedoch 16-Bit-Werte ohne Codierung. JavaScript führt keine Standardkonvertierung in Unicode durch, daher werden solche Zeichenfolgen durch „===“ und „==“ weitergeleitet Auch die Vergleichsergebnisse der Betreiber sind nicht gleich. String.localeCompare() in Teil 3 bietet eine weitere Möglichkeit, Strings zu vergleichen.
Zwei Referenzwerte sind gleich, wenn sie auf dasselbe Objekt, Array oder dieselbe Funktion verweisen. Zeigen sie auf unterschiedliche Objekte, sind sie nicht gleich, obwohl beide Objekte genau die gleichen Eigenschaften haben.
Der Gleichheitsoperator „==“ ähnelt dem Identitätsoperator, der Gleichheitsoperatorvergleich ist jedoch nicht streng. Wenn die beiden Zahlen nicht vom gleichen Typ sind, versucht der Gleichheitsoperator eine Typkonvertierung und vergleicht sie dann.
Wenn die beiden Operationstypen gleich sind, sind die Vergleichsregeln dieselben wie beim obigen Gleichheitsoperator. Bei absoluter Gleichheit sind die Vergleichsergebnisse gleich. Wenn sie nicht genau gleich sind, ergibt der Vergleich „ungleich“.
Wenn zwei Operationstypen unterschiedlich sind, betrachtet der Gleichheitsoperator „==“ sie auch als gleich. Die Erkennung der Gleichheit erfolgt nach den folgenden Regeln und Typkonvertierungen:
Wenn ein Typ null und einer undefiniert ist, sind sie gleich
Wenn ein Wert eine Zahl und der andere eine Zeichenfolge ist, konvertieren Sie zunächst die Zeichenfolge in eine Zahl und verwenden Sie dann die konvertierten Werte zum Vergleich.
Wenn ein Wert wahr ist, wird er in 1 umgewandelt und verglichen. Wenn ein Wert falsch ist, wird er zum Vergleich in 0 umgewandelt.
Wenn ein Wert ein Objekt und der andere Wert eine Zahl oder Zeichenfolge ist, verwenden Sie die Konvertierungsregeln der Methode in Kapitel 3, Abschnitt 8, Unterabschnitt 3, um das Objekt in einen primitiven Wert zu konvertieren, und vergleichen Sie ihn dann. Das Objekt wird über die Methode toString() oder die Methode valueOf() in einen primitiven Wert konvertiert. Die im Kern der JavaScript-Sprache integrierten Klassen versuchen zunächst, valueOf() und dann toString() zu verwenden. Mit Ausnahme der Datumsklasse kann die Datumsklasse nur über toString() konvertiert werden. Objekte, die nicht Teil der Kernsprache JavaScript sind, werden mithilfe der in der Implementierung definierten Methoden in primitive Werte konvertiert.
Vergleiche zwischen anderen verschiedenen Typen sind nicht gleich
Hier ist ein kleines Beispiel für Gleichberechtigung
"1" == wahr
Dieser Ausdruck wird als wahr ausgewertet, was darauf hinweist, dass Werte völlig unterschiedlicher Typen gleich sind. Der boolesche Wert true wird zunächst in die Zahl 1 konvertiert, bevor der Vergleich durchgeführt wird. Als nächstes wird auch die Zeichenfolge „1“ in die Zahl 1 umgewandelt, da die Werte der beiden Zahlen gleich sind, das Ergebnis also wahr ist.
ii. Vergleichsoperatoren
Weniger als (<)
Wenn der erste Operand kleiner als der zweite Operand ist, ist das Operationsergebnis „<“ wahr, andernfalls ist es falsch
Kleiner oder gleich (<=)
Größer als (>)
Größer als oder gleich (>=)
....(ohne Angabe der Bedeutung)
Die Operanden von Vergleichsoperatoren können beliebigen Typs sein. Allerdings können nur Zahlen und Zeichenfolgen tatsächlich Vergleichsoperatoren ausführen, sodass alle Operanden, die keine Zahlen oder Zeichenfolgen sind, einer Typkonvertierung unterzogen werden. Die Typkonvertierungsregeln lauten wie folgt:
Wenn der Operand ein Objekt ist, wird er gemäß den Konvertierungsregeln, die in der Sperrbeschreibung in Kapitel 3, Abschnitt 8, Unterabschnitt 3 beschrieben sind, in einen Grundwert konvertiert: Wenn valueOf() einen Grundwert zurückgibt, dann verwenden Sie diesen Grundwert Wert direkt. Andernfalls wird das Konvertierungsergebnis von toString() zum Vergleich verwendet.
Wenn nach der Konvertierung des Paares in einen primitiven Wert beide Operanden Zeichenfolgen sind, werden die beiden Zeichenfolgen in alphabetischer Reihenfolge verglichen. Die hier erwähnte „alphabetische Reihenfolge“ bildet die Indexreihenfolge der 16-Bit-Unicode-Zeichen.
Nachdem das Objekt in einen primitiven Wert konvertiert wurde und mindestens ein Operand keine Zeichenfolge ist, werden beide Operanden numerisch verglichen. 0 und -0 sind gleich. Unendlich ist größer als jede andere Zahl (außer Unendlich selbst) und -infinty ist kleiner als jede Zahl (außer sich selbst). Wenn ein Operand (oder eine konvertierte Zahl) NaN ist, gibt der Vergleichsoperator immer false
zurück
Bei numerischen Operatoren und String-Operatoren verhält sich der Plus-Operator anders als der Vergleichsoperator. Ersterer bevorzugt Strings und führt eine String-Verkettung durch, wenn einer seiner Operanden ein String ist. Vergleichsoperatoren bevorzugen Zahlen nur, wenn beide Operanden Zeichenfolgen sind. Es wird ein String-Vergleich durchgeführt.
Abschließend ist zu beachten, dass die Operatoren „<=" und „>=" bei der Bestimmung der Gleichheit nicht auf den Gleichheitsoperator und strenge Gleichheitsvergleichsregeln angewiesen sind. Im Gegensatz dazu ist der Operator „Kleiner als“ oder „Gleich“ einfach „nicht größer als“ und der Operator „Größer als“ oder „Gleich“ einfach „nicht kleiner als“. Es gibt nur eine Ausnahme: Wenn einer der Operanden (nach der Konvertierung) NaN ist, geben alle vier Vergleichsoperatoren fasle zurück.
iii.in-Operator
Derin-Operator erwartet, dass sein linker Operand ein String ist oder in einen String konvertierbar ist, und dass seine rechte Seite ein Objekt ist. Wenn das Objekt auf der rechten Seite einen Eigenschaftsnamen mit dem Namen „Linker Operandenwert“ hat, gibt der Ausdruck „true“ zurück. Beispiel:
var data = [7, 8, 8]
„0“ in Daten //=>True-Array enthält 0
1 in Daten // = & gt; True Nummern konvertiert in Zeichenfolgen
3 in data //=>phase Es gibt kein Element mit Index 3
iiii.instanceof Operator
Der Instanzoperator erwartet, dass der linke Operator ein Objekt ist und der rechte Operand die Klasse des Objekts angibt. Wenn das Objekt auf der linken Seite eine Instanz der Klasse auf der rechten Seite ist, gibt der Ausdruck „true“ zurück; darüber wird in Kapitel 9 gesprochen. Klassen von JavaScript-Objekten werden durch Initialisierung ihrer Konstruktoren definiert. In diesem Fall sollte der rechte Operand von „instanceof“ eine Funktion sein. Zum Beispiel:
Es ist zu beachten, dass alle Objekte Instanzen von Object sind. Bei der Überprüfung, ob ein Objekt eine Instanz einer Klasse ist, wird diese Beurteilung auch als „Superklassen“-Erkennung bezeichnet. Wenn das linke Operationsobjekt von „Instanz“ kein Objekt ist, gibt „Instanz von“ „Falsch“ zurück. Wenn die rechte Operation keine Funktion ist, wird eine Ausnahme von typewrong ausgelöst.
Um zu verstehen, wie der Instanzoperator funktioniert, müssen Sie zunächst die „Prototypkette“ verstehen. Die Prototypkette als Vererbungsmechanismus von JavaScript wird in Kapitel 6, Abschnitt 2, Abschnitt 2 ausführlich beschrieben.
Um den Ausdruck o-Instanz von f zu berechnen, berechnet JavaScript PenXian zunächst f.prototyoe und fragt dann o in der Prototypenkette ab. Wenn es gefunden wird, ist o eine Instanz von f (oder die übergeordnete Klasse von f). true wird zurückgegeben. Ansonsten falsch
10. Logischer Ausdruck
Logische Operatoren „&&“, „||“ und „!“ führen boolesche Operationen durch. Sie werden häufig zusammen mit relationalen Operatoren verwendet, um einen komplexeren Ausdruck zu bilden.
i. Logisches UND
Der „&&“-Operator kann auf drei verschiedenen Ebenen verstanden werden. Das einfachste Verständnis besteht darin, dass, wenn beide Operanden boolesche Werte sind, eine boolesche UND-Operation (AND) für zwei boolesche Werte ausgeführt wird. Nur wenn der erste und der zweite Operand wahr sind, wird „true“ zurückgegeben Der Operand ist falsch, dann wird false zurückgegeben.
„&&“ wird verwendet, um zwei relationale Ausdrücke zu verbinden
x == 0 && y == 0; //Gib nur true zurück, wenn x und y beide 0 sind
Relationale Ausdrücke geben immer wahr oder falsch zurück. Wenn sie also auf diese Weise verwendet werden, gibt „&&“ selbst auch wahr oder falsch zurück. Relationale Operatoren haben eine höhere Priorität als „&&“ (und „||“), sodass Ausdrücke wie dieser sicher geschrieben werden können, ohne dass Klammern erforderlich sind.
Der Operand „&&“ ist nicht unbedingt ein boolescher Wert. Denken Sie daran, dass einige Werte als „wahre Werte“ und „falsche Werte“ betrachtet werden können. (Wie in Kapitel 3, Abschnitt 3 sind falsche Werte: false null undefiniert 0 -0 NaN und „“, alle und andere Werte einschließlich aller Objekte sind wahre Werte). Die zweite Ebene des Verständnisses von „&&“ besteht darin, dass „&&“ eine boolesche UND-Operation (AND) für wahre und falsche Werte ausführen kann. Wenn beide Operanden wahr sind, wird ein wahrer Wert zurückgegeben; andernfalls ist mindestens ein Operand falsch. Jedes Mal, wenn in JavaScript ein boolescher Wert verwendet wird, behandelt die Ausdrucksanweisung ihn als wahren oder falschen Wert, sodass „&&“ tatsächlich nicht immer wahr und falsch zurückgibt. Dies ist jedoch keine große Sache.
Es ist zu beachten, dass der oben genannte Operator „wahren Wert“ und „falschen Wert“ zurückgibt, aber nicht erklärt, was der „wahre Wert“ oder „falscher Wert“ ist. Aus diesem Grund werden wir ausführlich darauf eingehen . Verständnis der dritten Ebene von „&&“. Der Operator berechnet zuerst den Wert des linken Operanden, dh er berechnet zuerst den Ausdruck auf der linken Seite von „&&“. Wenn das Berechnungsergebnis ein falscher Wert ist, muss das Ergebnis des gesamten Ausdrucks ein falscher Wert sein. „&&“ gibt also einfach den Wert der Operation auf der linken Seite zurück, ohne den Operanden auf der rechten Seite zu berechnen.
Dies ist wichtig, um zu verstehen, dass „&&“ möglicherweise nicht den richtigen Operanden berechnet. Im obigen Code ist der Wert der Variablen P null und wenn p.x berechnet wird, wird nur p.x ausgelöst
wird nur berechnet, wenn es ein wahrer Wert ist (kann nicht null oder undefiniert sein)Das Verhalten von „&&“ wird manchmal als „Kurzschluss“ bezeichnet, und wir sehen oft, dass viel Code dies ausnutzt, um Code bedingt auszuführen. Beispielsweise sind die folgenden zwei Codes äquivalent
Seien Sie im Allgemeinen vorsichtig, wenn der Ausdruck auf der rechten Seite von „&&“ Nebenwirkungen hat (Zuweisungs-, Inkrementierungs-, Dekrementierungs- und Funktionsaufrufausdrücke). Denn die Ausführung dieser Ausdrücke mit Nebeneffekten hängt vom Berechnungsergebnis der linken Bedienermaus ab.
Obwohl „&&“ gemäß dem Verständnis der zweiten und dritten Ebene einige komplexe Ausdrucksoperationen ausführen kann, wird „&&“ in den meisten Fällen nur zur Durchführung boolescher Berechnungen für wahre und falsche Werte verwendet.
ii. Logisches ODER (||)
Der Operator „||“ führt eine boolesche ODER-Operation (OR) für zwei Operanden durch. Wenn einer der Operanden wahr ist, wird true zurückgegeben, wenn beide Operanden falsch sind, wird false zurückgegeben.
Obwohl der „||“-Operator in den meisten Fällen nur eine einfache boolesche ODER-Operation (wie „&&“) ausführt, weist er auch einige komplexere Verhaltensweisen auf. Er berechnet zunächst den Wert des ersten Operanden Das heißt, der Ausdruck auf der linken Seite wird zuerst berechnet. Wenn das Berechnungsergebnis wahr ist, wird der wahre Wert zurückgegeben.
Wie bei „&&“ sollten Sie vermeiden, dass der rechte Operand einige Ausdrücke mit Nebenwirkungen enthält, es sei denn, Sie verwenden explizit einen Ausdruck mit Nebenwirkungen auf der rechten Seite und der Ausdruck auf der rechten Seite wird möglicherweise nicht ausgewertet.
Dieser Operator wird am häufigsten verwendet, um den ersten Ausdruck mit wahrem Wert aus einer Reihe alternativer Ausdrücke auszuwählen.
Diese übliche Verwendung erfolgt normalerweise im Hauptteil einer Funktion, um Standardwerte für Parameter bereitzustellen.
iii. Logisches NICHT (!)
Der „!“-Operator ist ein unärer Operator, der vor einem einzelnen Operanden steht. Sein Zweck besteht darin, den booleschen Wert des Operanden zu negieren.
Im Gegensatz zu den Operatoren „&&“ und „||“ konvertiert der Operator „!“ zunächst seinen Operanden in einen booleschen Wert (siehe die Berufungsregeln in Kapitel 3) und negiert dann den booleschen Wert. Das heißt, „!“ gibt immer wahr und falsch zurück. Darüber hinaus kann der boolesche Wert eines Werts mithilfe von zwei logischen NICHT-Operationen ermittelt werden: (!!x, siehe Kapitel 3, Abschnitt 8, Abschnitt 2)
„!“ hat eine hohe Priorität und ist eng mit den Operanden verbunden. Wenn Sie p && q vergleichen möchten, benötigen Sie Gartenklammern! Der folgende Code:
Für alle Werte von p und q gelten diese beiden Ausdrücke immer.
11. Zuweisungsausdruck
Javascript verwendet den Operator „=", um Variablen oder Attributen Werte zuzuweisen, zum Beispiel:
L'opérateur "=" s'attend à ce que son opérande de gauche soit une lvalue : une variable ou une propriété d'objet (ou un élément de tableau), et son opérande de droite peut être n'importe quelle valeur de n'importe quel type. La valeur de l'expression d'affectation est la valeur de l'opérande de droite. Un effet secondaire d'une expression d'affectation est que la valeur de l'opérande de droite est affectée à la variable ou à la propriété d'objet de gauche. Dans ce cas, les références ultérieures à cette variable et aux propriétés de l'objet obtiendront cette valeur.
Bien que la valeur d'une expression d'affectation soit très simple, vous verrez parfois des expressions complexes contenant des expressions d'affectation. Par exemple : mettez les opérations d’affectation et de détection dans une seule expression :
Si tel est le cas, vous devez clairement connaître la différence entre "=" et "==" ! , il convient de noter que "=" a une très faible priorité. Habituellement, lorsqu'une instruction d'affectation est utilisée dans une expression longue, des crochets de jardin doivent être ajoutés pour garantir le bon ordre des opérations.
L'associativité des opérateurs d'affectation s'effectue de droite à gauche. C'est-à-dire que plusieurs opérateurs d'affectation apparaissent dans une expression, et l'ordre des opérations est également de droite à gauche. Par conséquent, plusieurs variables peuvent être affectées des manières suivantes. .
Opération d'affectation avec opération :
En plus des opérations d'affectation régulières, JavaScript prend également en charge d'autres opérateurs d'affectation, qui connectent les opérations d'affectation à d'autres opérateurs. Fournir une méthode de calcul plus rapide. Par exemple, l'opérateur = effectue l'opérateur d'addition et l'opération d'affectation, l'expression suivante :
total = salaes_tax;
Équivalent à l'expression suivante
total = total salaes_tax
L'opérateur "=" peut agir sur des nombres ou des chaînes. Si son opération est un nombre, il effectuera des opérations d'addition et d'affectation ; s'il s'agit d'une chaîne, il effectuera des opérations de concaténation et d'affectation de chaînes.
Ce type d'opérateurs inclut également "-=","*=","&=", etc., comme indiqué dans le tableau suivant des opérateurs d'affectation
Exemple d'opérateur Équivalent à
= une =b une=une b
-= a-=b a=a-b
*= a*=b a=a*b
/= a/=b a=a/b
%= a%=b a=a%b
<<= a<<=b a=a<
>>= a>>=b a=a>>b
>>>= a>>>=b a=a>>>b
&= a&=b a=a&b
|= une|=b une=une|b
^= a^=b a=a^b
Dans la plupart des cas, l'expression est
a op =b
L'op représente ici un opérateur, et cette expression est équivalente à
a =a op b
Sur la première ligne, l'expression a est évaluée une fois et sur la deuxième ligne, l'expression a est évaluée deux fois.
Les deux ne sont pas équivalents uniquement si a contient des expressions avec des effets secondaires (tels que des appels de fonction et des opérations d'affectation). Les deux expressions suivantes ne sont pas équivalentes
12. Calcul d'expression
Comme de nombreux langages interprétés, JavaScript peut également interpréter et exécuter une chaîne composée de code source JavaScript et générer une valeur. JavaScript utilise la fonction globale eval() pour réaliser ce travail.
eval("3 2") //=>5
La détermination dynamique des chaînes dans le code source est une fonctionnalité de langage puissante dont l'application est rarement nécessaire dans la pratique. Si vous utilisez eval(), vous devez soigneusement déterminer si vous en avez vraiment besoin.
Ce qui suit réduit l'utilisation de base de eval() et présente deux méthodes pour l'utiliser strictement. Du point de vue de l'optimisation du code, ces deux méthodes ont le moins d'impact sur le code d'origine.
i.eval (eval() est une fonction, mais elle a été traitée comme un opérateur.)
eval() n'a qu'un seul paramètre. Si le paramètre passé n'est pas une chaîne, il renvoie directement ce paramètre. Si le paramètre est une chaîne, il compilera la chaîne en JavaScript (analyse). Si la compilation échoue, une erreur de syntaxe (SyntaxError) sera générée. Si la compilation réussit, ce code sera exécuté et la valeur de la dernière expression ou instruction de la chaîne sera renvoyée. Si la dernière expression n'a pas d'instruction ou de valeur, undefined sera finalement renvoyé. Si la chaîne lève une exception, l'exception transmet l'appel à eval()
La chose la plus importante à propos de eveal() est qu'elle utilise l'environnement de portée variable de celui qui l'appelle, c'est-à-dire qu'elle recherche la valeur de la variable et définit de nouvelles variables et fonctions de la même manière que le code dans le portée du code local. Si une fonction définit une variable locale x puis appelle eval("x"), elle renverra la valeur de la variable locale. S'il appelle eval("x=1"), il modifie la valeur de la variable locale. Si la fonction appelle eval("var y=3;") elle déclare une nouvelle variable locale y. De même, une fonction peut déclarer une fonction locale via le code suivant :
eval("function f(){return x 1;}");
Si eval() est appelé dans le code de niveau supérieur. Bien entendu, il agira sur des variables globales et des fonctions globales.
ii. Évaluation globale()
eval() a la capacité de modifier les variables locales. C'est un gros problème pour l'optimiseur javascript. Cependant, en guise de mesure provisoire, javascript ne fait pas ce que fait la ligne qui appelle la fonction eval(). . Mais comment fonctionne l'interpréteur JavaScript lorsque le script définit un alias et l'appelle avec un nom ? Pour simplifier l'interpréteur JavaScript ? Le standard ECMAScipt3 stipule qu'aucun interpréteur n'est autorisé à attribuer des alias à eval(). Si eval() est appelé en utilisant un autre alias, une exception EvalError sera levée.
En fait, la plupart des implémentations ne le font pas. Lorsqu'il est appelé via un alias, eval() exécutera sa chaîne en tant que code global de niveau supérieur. L'exécution du code peut définir de nouvelles variables globales et fonctions globales. Le code exécuté peut définir de nouvelles variables globales et fonctions globales, ou attribuer des valeurs aux variables globales. Cependant, les variables locales de la fonction appelante ne peuvent pas être modifiées ou modifiées, cela n'affectera donc pas l'optimisation du code au sein de la fonction.
ECMAScript5 s'oppose à l'utilisation d'EvalError et standardise le comportement de eval(). "Direct eval", lorsque la fonction eval() est appelée directement en utilisant le nom "eval" non qualifié, elle se branche toujours dans sa portée contextuelle. D'autres appels indirects utilisent des fonctions globales comme portée de contexte. Et ne peut pas lire, écrire, définir des variables et des fonctions locales. Voici un exemple de code :
Javascript prend en charge de nombreux autres opérateurs.
i.Opérateur conditionnel (?:)L'opérateur conditionnel est le seul opérateur ternaire en JavaScript. Habituellement, cet opérateur s'écrit « ? : ». Cet opérateur a trois opérandes. Le premier opérande est avant "?" et le deuxième est entre "?" Le troisième opérande se trouve dès après ":", tel que
x > 0 ? x : -x; //Trouver la valeur absolue de x
Les opérandes des opérateurs conditionnels peuvent être de n’importe quel type. Le premier opérande est traité comme une valeur booléenne. S'il est vrai, le deuxième opérande est évalué et le résultat est renvoyé. Affectation Si la première opérande de valeur est fausse, alors la troisième opérande est évaluée. et renvoie le résultat du calcul. Les deuxième et troisième opérandes sont toujours évalués à l'un d'eux. Il est impossible de faire les deux en même temps. En fait, le même effet peut être obtenu en utilisant les instructions if (5.4.1). L'opérateur « ? : » fournit simplement une forme abrégée. Voici un scénario d'utilisation typique de "?:", qui détermine si une variable est définie. Si elle est définie, elle est utilisée. Si elle n'est pas définie, une valeur par défaut est utilisée.