[]
ist ein Array, aber ![]
ist ein boolescher Wert. Immer wenn Sie versuchen, zwei Objekte mit verschiedenen Typen mit ==
zu vergleichen, sollten beide Objekte in vergleichbare Objekte transformiert werden (mit ToNumber
, siehe Schritt 7. in 11.9.3). Deshalb liefert [] == ![]
true, das erste leere Array wird zu false
ausgewertet.
11.9.3 Der abstrakte Gleichheitsvergleichsalgorithmus
Der Vergleich x == y, wobei x und y Werte sind, ergibt wahr oder falsch. Ein solcher Vergleich wird als durchgeführt folgt:
- [...]
- Wenn x null ist und y nicht definiert ist, true zurück.
- Wenn x nicht definiert ist und y null ist, true zurück.
- Wenn Typ (x) Nummer und Typ (y) Zeichenfolge ist, gebe das Ergebnis des Vergleichs zurück x == ToNumber (y).
- Wenn Typ (x) String und Typ (y) Zahl ist, geben Sie das Ergebnis des Vergleichs ToNumber (x) == y zurück.
- Wenn Type (x) Boolean ist, geben Sie das Ergebnis des Vergleichs ToNumber (x) == y zurück.
- Wenn Type (y) Boolean ist, gebe das Ergebnis des Vergleichs x == ToNumber (y) zurück.
- Wenn Typ (x) entweder String oder Zahl und Typ (y) Objekt ist, gebe das Ergebnis des Vergleichs zurück x == ToPrimitive (y).
- Wenn Typ (x) Objekt und Typ (y) entweder Zeichenfolge oder Zahl ist, Rückgabe des Ergebnisses des Vergleichs ToPrimitive (x) == y.
- Gibt false zurück.
Wenn Sie jedoch den strikten Typvergleichsoperator ===
verwenden, ist das Ergebnis falsch, da sich beide Typen unterscheiden:
11.9.6 Der Strict Equality Comparison-Algorithmus
Der Vergleich x === y, wobei x und y Werte sind, ergibt wahr oder falsch. Ein solcher Vergleich wird durchgeführt wie folgt:
- Wenn sich Typ (x) von Typ (y) unterscheidet, geben Sie false zurück.
- Wenn Typ (x) nicht definiert ist, geben Sie true zurück.
- Wenn Typ (x) Null ist, gebe true zurück.
- Wenn Typ (x) Nummer ist, dann
- Wenn x NaN ist, gebe false zurück.
- Wenn y NaN ist, gebe false zurück.
- Wenn x derselbe Zahlenwert wie y ist, gib true zurück.
- Wenn x +0 und y -0 ist, geben Sie true zurück.
- Ist x gleich -0 und y ist +0, true zurück.
- Gibt false zurück.
- Wenn Type (x) eine Zeichenfolge ist, geben Sie true zurück, wenn x und y genau die gleiche Zeichenfolge sind (gleiche Länge und gleiche Zeichen in entsprechenden Positionen); Andernfalls gebe false zurück.
- Wenn Typ (x) Boolesch ist, true zurück, wenn x und y beide wahr oder beide falsch sind; Andernfalls gebe false zurück.
- Gibt true zurück, wenn sich x und y auf dasselbe Objekt beziehen. Andernfalls gebe false zurück.
Tags und Links javascript