Heim  >  Artikel  >  Web-Frontend  >  Ausführliche Erläuterung der Definition und Verwendung relationaler Ausdrücke im JavaScript-Grundkurs

Ausführliche Erläuterung der Definition und Verwendung relationaler Ausdrücke im JavaScript-Grundkurs

伊谢尔伦
伊谢尔伦Original
2017-07-19 10:24:531231Durchsuche

Relationale Operatoren werden verwendet, um eine Beziehung zwischen zwei Werten zu testen (Gleichheit, kleiner als oder „ist eine Eigenschaft von“) und geben „wahr“ und „falsch“ zurück, je nachdem, ob die Beziehung existiert. Relationale Ausdrücke werden normalerweise in if-while- oder for-Anweisungen verwendet, um den Ausführungsfluss des Programms zu steuern.

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 „!==" lauten „==", die Negation des Operators „===" ist ein boolescher NOT-Operator, wir werden „!=“ verwenden ", "!==" heißt Ungleichheit, nicht strikte Gleichheit

Der Vergleich von JavaScript-Objekten ist ein Vergleich von Referenzen, kein Vergleich von Werten. 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 Werte nicht vom gleichen Typ sind, sind sie nicht gleich
Wenn beide Werte null oder undefiniert sind, sind sie nicht gleich
Wenn beide Werte boolesch wahr sind oder falsch, dann sind sie gleich
Wenn einer der Werte NaN ist oder beide Werte NaN sind, dann sind sie nicht gleich und andere Werte, einschließlich sich selbst, sind nicht gleich.
Zwei Werte sind gleich, wenn sie Zahlen sind und gleich. Wenn ein Wert 0 und ein Wert -0 ist, sind sie ebenfalls gleich.
Wenn zwei Werte Zeichenfolgen sind und die 16 Ziffern (siehe Kapitel 3, Abschnitt 2), die in den entsprechenden Bits enthalten sind, genau gleich sind, sind sie gleich. 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 über „===“ 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 für den oben genannten Gleichheitsoperator dieselben. Bei absoluter Gleichheit sind die Vergleichsergebnisse gleich. Wenn sie nicht genau gleich sind, ergibt der Vergleich „ungleich“.
Wenn zwei Operationstypen unterschiedlich sind, werden sie auch vom Gleichheitsoperator „==" als gleich betrachtet. Die Erkennung der Gleichheit erfolgt nach den folgenden Regeln und Typkonvertierungen:
Wenn ein Typ null und der andere undefiniert ist, sind sie gleich.
Wenn ein Wert eine Zahl und der andere eine Zeichenfolge ist, konvertieren Sie die Zeichenfolge zunächst in a number und verwenden Sie dann den konvertierten Wert zum Vergleich.
Wenn ein Wert wahr ist, konvertieren Sie ihn zum Vergleich in 1. Wenn ein Wert falsch ist, konvertieren Sie ihn zum Vergleich in 0.
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 Gleichheit

"1" == wahr
Das Ergebnis dieses Ausdrucks ist wahr, was darauf hinweist, dass es vollständig ist Werte verschiedener Typen werden verglichen, um gleich zu sein. 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 Der Vergleichsoperator

ist kleiner als (556862f1b1718b480455ebb820332db8)

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 in der Sperrbeschreibung in Kapitel 3, Abschnitt 8, Unterabschnitt 3 beschriebenen Konvertierungsregeln in einen primitiven Wert konvertiert: If valueOf () gibt einen primitiven Wert zurück und verwendet diesen primitiven 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“ ist die Zusammensetzung der beiden Die Indexreihenfolge der 16-Bit Unicode-Zeichen der Zeichenfolge.
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 für Zahlen und Zeichenfolgen immer false
zurück Operatoren verhält sich der Plus-Operator anders als der Vergleichsoperator. Ersterer bevorzugt Zeichenfolgen und führt eine Zeichenfolgenverkettung durch, wenn einer seiner Operanden eine Zeichenfolge ist. Vergleichsoperatoren bevorzugen Zahlen nur, wenn beide Operanden Zeichenfolgen sind. Es wird ein String-Vergleich durchgeführt.

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 c05b7e596594035750afd3e456b23c28=" bei der Bestimmung der Gleichheit nicht auf den Gleichheitsoperator und strenge Gleichheitsvergleichsregeln verlassen . 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 4 Vergleichsoperatoren fasle zurück.

iii.in-Operator

in-Operator Hoffentlich ist sein linker Operand a String oder kann in einen String konvertiert werden, und seine rechte Seite wird voraussichtlich ein Objekt sein. Der Ausdruck gibt „true“ zurück, wenn das Objekt auf der rechten Seite einen Eigenschaftsnamen mit dem Namen „linker Operandenwert“ hat. Beispiel:

var point = {
     x: 1,
     y: 1
   } //定义一个对象
   "x" in point //=>true 对象有一个名为x的属性
   "z" in point //=>false 对象无名为z的属性
   "toString" in point // =>true 对象继承了toString方法
   var data = [7, 8, 8]
            "0" in data //=>true 数组包含0
             1 in data //=>true 数字转换为字符串
             3 in data //=>fase 没有索引为3的元素

iiii.instanceof-Operator

instanceof-Operator erwartet, dass der linke Operator ein ist Objekt, und der rechte Operand gibt die Klasse des Objekts an. 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:

var d = new Date(); //构造一个新对象
  d instanceof Date; //计算结果为true, d是Date() 创建的
  d instanceof Object //计算结果为true ,所有的对象都是Object的实例
  d instanceof Number //计算结果为 false,d不是一个Number对象
  var a = [1,2,3] //数组直接量创建数组
  a instanceof Array //计算结果true a为数组
  a instanceof Object //true 所有的数组都是对象
  a instanceof RegExp //fasle 数组不是正则表达式

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 ausführlich beschrieben 2.

Um den Ausdruck o Instanz von f zu berechnen, berechnet JavaScript BiXian 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). ), dann Return true. Ansonsten falsch

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Definition und Verwendung relationaler Ausdrücke im JavaScript-Grundkurs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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