herauszufinden Javascript Gleichheitsoperator

9

Beim Versuch, den Unterschied zwischen Gleichheitsoperator und Identitätsoperator vollständig zu verstehen, stieß ich auf eine Artikel bei MSDN, der erklärt, was beide in Bezug auf ihre inneren Abläufe tun, aber ich hatte immer noch ein paar Zweifel und beschloss, ein Flussdiagramm zu erstellen, damit ich ein besseres Bild haben konnte. Nun meine Frage ist, ist dieses Flussdiagramm korrekt? oder verpasse ich etwas?

Ich gehe auch davon aus, dass der Identity-Operator (===) im ersten Schritt genauso funktionieren würde, ohne jedoch zu versuchen, A und B in Boolesche Werte, Zahlen oder Strings umzuwandeln. Ist das richtig?

Sie können das Bild auch hier sehen:

Ok, hier ist das Richtige, es war eine Frage der Prinzipien;)

    
Overlord 30.10.2014, 02:07
quelle

2 Antworten

4
  

ist dieses Flussdiagramm korrekt?

Nein. Sie sollten die ECMAScript-Spezifikation für den Abstrakten Gleichheitsvergleichsalgorithmus um das Flussdiagramm zu erstellen. ToBoolean ist sicherlich nicht der erste Schritt (es wird nicht im any Schritt verwendet).

  

oder fehle ich etwas?

Ja, eine Menge.

  

Es ist auch mein Verständnis, dass der Identity-Operator (===) im Wesentlichen genauso funktioniert, aber ohne zu versuchen, A und B im ersten Schritt in Boolesche Werte, Zahlen oder Strings umzuwandeln. Ist das richtig?

Der Strenge Gleichheitsvergleichsalgorithmus ist fast identisch mit dem Abstrakten Gleichheitsvergleichsalgorithmus gibt es ein Unterschied nur, wenn das Argument Typen unterschiedlich ist, und in diesem Fall gibt es eine genaue Reihenfolge, in der die Typen gleich gemacht werden, bevor der Vergleich gemacht wird.

    
RobG 30.10.2014, 02:40
quelle
-2
  

ist dieses Flussdiagramm korrekt?

Nein. Abgesehen davon, dass es schrecklich gezeichnet ist, ist es irreführend und teilweise falsch.

  

Vermisse ich etwas?

Ja. Der erste Schritt, " versuche, A und B in boolean, string oder number zu konvertieren, ist falsch - das ist nicht der erste Schritt in der Gleichheitsvergleichsalgorithmus . Außerdem, wann welche der Variablen in welchen Typ konvertiert werden soll?

Dann sollte der nächste Schritt eine Typunterscheidung sein, anstatt wiederholt nach identischen Werten eines bestimmten Typs zu fragen.

Der "letzte" Schritt " Können sie (die Typen) in eine der letzten 5 Situationen gezwungen werden? - & nbsp; Coerce-Typen " fehlen Details. Alle Details. Welches ist der relevanteste Teil des schlampigen Gleichheitsvergleichs:

  • Welche Arten können erzwungen werden?
  • Welche Arten würden zu welchen gezwungen werden?
  • Wie funktioniert der Zwang der Werte?

Und nein, nach dem Zwang beginnt der Algorithmus ziemlich am Anfang, nicht mit der Frage nach Strings.

  

Es ist auch mein Verständnis, dass der Identity-Operator (===) im Wesentlichen genauso funktioniert, aber ohne zu versuchen, A und B im ersten Schritt in Boolesche Zahlen oder Zeichenfolgen umzuwandeln.

Dieser erste Schritt ist im tatsächlichen Algorithmus nicht ersichtlich, also Nein. Tatsächlich funktioniert === mit Ausnahme des letzten Schritts , der Werte in andere Typen umwandelt - stattdessen false wird zurückgegeben.

Bearbeiten: Ihr zweites Diagramm ist korrekt (korrekt), obwohl es immer noch einige seltsame Layout-Entscheidungen enthält.

    
Bergi 30.10.2014 02:55
quelle

Tags und Links