Heim >Web-Frontend >js-Tutorial >Javascript-Kernleseausdrücke und Operatoren_Grundkenntnisse

Javascript-Kernleseausdrücke und Operatoren_Grundkenntnisse

WBOY
WBOYOriginal
2016-05-16 16:14:251284Durchsuche

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:

Code kopieren Der Code lautet wie folgt:

               1,23 //Digitale Direktmenge
„hello“ //String-Literal
Zu
Einige reservierte Wörter in JavaScript stellen primitive Ausdrücke dar

Code kopieren Der Code lautet wie folgt:
                true //Boolescher Wert: true
FALSCH Null // Einen Wert zurückgeben: leer
Dies //gibt das „aktuelle“ Objekt zurück


Durch die Studie in Kapitel 3 ist dies im Gegensatz zu anderen Schlüsselwörtern keine Konstante, und die Werte, die an verschiedenen Stellen im Programm zurückgegeben werden, sind ebenfalls unterschiedlich. Das Schlüsselwort this kommt häufig in der objektorientierten Programmierung vor. Dies gibt das Objekt der Quadratmethode zurück. Der dritte primitive Ausdruck schließlich ist die Variable


i //Gib den Wert der Variablen i
zurück sum //Gib den Wert von sum
zurück Undefiniert // ist eine globale Variable, im Gegensatz zu null ist es kein Schlüsselwort


2. Initialisierungsausdrücke für Objekte und Arrays.

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

var mat = [[1,2,3],[4,5,6],[7,8,9]];


Die Elemente zwischen den Listen im Array-Literal können weggelassen werden und die leeren Räume werden mit undefiniert gefüllt, zum Beispiel wie folgt:

var a=[1,,,,5]

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.

Code kopieren Der Code lautet wie folgt:

var p = {x: 2.1,y: -3} //Ein Objekt mit zwei Attributmitgliedern
            var q = {}; //Leeres Objekt
​​​​​​ q.x=2.1;q.y=-3; //Die Attributmitglieder von q sind die gleichen wie die von p

Objektliterale können auch verschachtelt werden, z. B.

Code kopieren Der Code lautet wie folgt:

var anh = {left:{x:2,y:3},
                                                                                                                                                                                                                                                                                           
Wenn JavaScript den Wert eines Objektinitialisierungsausdrucks berechnet, werden die Objektausdrücke jeweils einmal berechnet und müssen keine konstanten Werte enthalten: Es kann sich um beliebige JavaScript-Ausdrücke handeln. Ebenso können die Namen von Eigenschaften in Objektliteralen Zeichenfolgen und keine Bezeichner sein. (Sehr nützlich, wenn in dieser Zeile nur reservierte Wörter oder einige unzulässige Bezeichner als Attributnamen verwendet werden können)

Code kopieren Der Code lautet wie folgt:
          var side = 1;
          var quadrat = {"left":{x:p.x,y:p.y},
             'right':{x:p.x side,y:p.y side}}

In den Kapiteln 6 und 7 werden noch einmal Initialisierungsausdrücke für Objekte und Arrays besprochen.

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.

Code kopieren Der Code lautet wie folgt:
Ausdruck . Bezeichner
Ausdruck [Ausdruck]

Die erste Schreibweise ist ein Ausdruck, gefolgt von einem Punkt und einem Bezeichner. Der Ausdruck gibt das Objekt an und der Bezeichner gibt die Eigenschaft an, auf die zugegriffen werden soll.

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

Code kopieren Der Code lautet wie folgt:
o.x //=>1x Attribut des Ausdrucks o
o.y.z //=>3 z-Attribut des Ausdrucks o.y
                                                                                                                                                                                                                    . a[1] //=>4 Das Element des Ausdrucks a mit Index 1
a[2]["1"]//=>6 Das Element mit Index 1 im Ausdruck a[2]
a[0].x //=>1: x-Attribut des Ausdrucks a[0]

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)

an

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

kombiniert

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.

Code kopieren Der Code lautet wie folgt:

w = x - y - z

Entspricht diesem Code:

Code kopieren Der Code lautet wie folgt:

w = ((x - y) - z)

Umgekehrt der folgende Ausdruck:

Code kopieren Der Code lautet wie folgt:

x = ~-y;
w = x = y = z;
q=a?b:c?d:e?f:g;

Genau das Gleiche wie dieser Code

Code kopieren Der Code lautet wie folgt:

x=~(-y);
w=(x=(y=z));
q=a?b:(c?d:(e?f:g))

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:

Code kopieren Der Code lautet wie folgt:

1 2 //=> 3
„Hallo“ „“ „dort“ // =>“Hallo da“
"1" "2" //=>"12"

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

Code kopieren Der Code lautet wie folgt:

1 2 //=>3 Addition
"1" "2" //=>"12" String-Verkettung
"1" 2 //=>"12"Die Zahl wird in einen String umgewandelt und dann wird der String verbunden
1 {} // = & gt; "1 [Objektobjekt]": Konvertieren Sie das Objekt in eine Zeichenfolge und führen Sie String -Verkettung
durch                    wahr wahr //=>2 Wandeln Sie den booleschen Wert in eine Zahl um und addieren Sie ihn dann
                 2 null //=>2 null wird in 0 konvertiert und dann
hinzugefügt                   2 undefiniert //=>NaN undefiniert wird für die Addition
in NaN umgewandelt

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

Code kopieren Der Code lautet wie folgt:

               1 2 „bmice“ //=> „3 bmice“
              1 (2 "bmice") => "12bmice"

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.

Code kopieren Der Code lautet wie folgt:

1 2 //=>3 Addition, das Ergebnis ist 3
„1“ „2“ //String-Verkettung, das Ergebnis ist „12“
„1“ 2 //String-Verkettung, 2 wird in „2“ umgewandelt, das Ergebnis ist „12“
                11 < 3 //Zahlenvergleich, das Ergebnis ist wahr
"11" < "3" //String-Vergleich, das Ergebnis ist wahr
„11“ < 3 // Zahlenvergleich, „11“ wird in 11 umgewandelt und das Ergebnis ist wahr
„one“ < 3 //Zahlenvergleich, „one“ wird in NaN umgewandelt, das Ergebnis ist falsch

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

Der

in-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:

Code kopieren Der Code lautet wie folgt:

var point = {
                       x: 1,
                   y: 1
                                                                                                                                   // Definiere ein Objekt
„x“ im Punkt //=>true Das Objekt hat eine Eigenschaft namens x
„z“ im Punkt //=>false Das unbenannte Attribut des Objekts ist z
„toString“ im Punkt // =>true Das Objekt erbt die toString-Methode

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:

Code kopieren Der Code lautet wie folgt:

               var d = new Date(); //Erstelle ein neues Objekt
               d instanceof Date; //Das Berechnungsergebnis ist wahr, d wird von Date()
erstellt                d Instanz von Object //Das Berechnungsergebnis ist wahr, alle Objekte sind Instanzen von Object
                d-Instanz von Number // Das Berechnungsergebnis ist falsch, d ist kein Number-Objekt
                 var a = [1,2,3] //Array-Literal erstellt Array
eine Instanz von Array // Das Berechnungsergebnis ist wahr. a ist ein Array
              eine Instanz von Object //true Alle Arrays sind Objekte
               eine Instanz von RegExp //fasle-Array ist kein regulärer Ausdruck

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.

Code kopieren Der Code lautet wie folgt:

var o = {
                    x: 1
            };
          var p = null;
o && o.x; //=>1 : 1:0 ist ein wahrer Wert, daher ist der Rückgabewert o.x
                p && p.x //= null: p ist ein falscher Wert, daher wird er ohne Berechnung von p.x zurückgegeben

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

Code kopieren Der Code lautet wie folgt:

Wenn (a == b) stop (); // Nur wenn Sie nur a == B haben, können Sie stop ()
übertragen (a == b) && stop(); //Das Gleiche wie oben

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.

Code kopieren Der Code lautet wie folgt:

​​​​ //Wenn max_width definiert wurde, verwenden Sie es direkt. Die Zuweisung sucht im Einstellungsobjekt nach max_width
​​​​ //Wenn es nicht definiert ist, wird eine hartcodierte Konstante verwendet.
var max =max_width ||. Preferences.max_windth || 500;

Diese übliche Verwendung erfolgt normalerweise im Hauptteil einer Funktion, um Standardwerte für Parameter bereitzustellen.

Code kopieren Der Code lautet wie folgt:

//Kopieren Sie die erfolgreichen Attribute von o nach p und geben Sie p
zurück              Funktion copy(o, p) {
                   p = p || {} //Wenn kein Objekt an Parameter p übergeben wird, wird ein neu erstelltes Objekt verwendet.
//Hauptlogik im Funktionskörper

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:

Code kopieren Der Code lautet wie folgt:

                 !(p && q) === !p || !q
                 !(p || q) === !p && !q

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:

Code kopieren Der Code lautet wie folgt:

                i = 0 //Variable i auf 0 setzen
                 o.x = 1 //Setze das Attribut x des Objekts o auf 1

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 :

Copier le code Le code est le suivant :

(a = b) == 0

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. .

Copier le code Le code est le suivant :

         i=j=k=0; //Initialiser les trois variables à 0

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

Copier le code Le code est le suivant :

              données[i] *= 2;
              données[i] = données[i] * 2

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 :

Copier le code Le code est le suivant :

var geval = eval; //Appeler eval en utilisant un alias sera une eval globale
          var x = "global",
                   y = "global" //Deux variables globales
              function f() { //Évaluation locale
exécutée dans la fonction ​​​​​​​​var                    eval("x = 'changed';"); // eval modifie directement le
de la variable locale Retour             }
             function g() { //Cette fonction exécute une évaluation globale
                    var y = "local" //Les variables locales sont définies
                    geval("y = 'changed';" //Modification indirecte de la valeur des variables locales
); Return y; // Retour aux variables locales inchangées
            }
                   console.log(f(), x); //Les variables locales ont été modifiées, la sortie locale a été modifiée globale
                 console.log(g(), y); //La variable globale a été modifiée, sortie locale globalchanged


13. Autres opérateurs.

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.


grett = "bonjour" (nom d'utilisateur ? nom d'utilisateur : "trois");


Est équivalent au code ci-dessous, mais celui ci-dessus est plus concis

          grett = "bonjour";
&n
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Schreiben praktischer Provinz- und Stadtselektoren in Javascript_Javascript-KenntnissenNächster Artikel:Schreiben praktischer Provinz- und Stadtselektoren in Javascript_Javascript-Kenntnissen

In Verbindung stehende Artikel

Mehr sehen