Kann jemand erklären, warum diese Ungleichungen von JavaScript-Arrays als wahr bewertet werden?Array-Gleichheit/Ungleichheit
[""] !== [""]
[1] !== [1]
[] !== []
[""] != [""]
[1] != [1]
[] != []
Kann jemand erklären, warum diese Ungleichungen von JavaScript-Arrays als wahr bewertet werden?Array-Gleichheit/Ungleichheit
[""] !== [""]
[1] !== [1]
[] !== []
[""] != [""]
[1] != [1]
[] != []
===
ist strenge Gleichheit.
Beim Vergleich von Objekten wird nur true zurückgegeben, wenn beide Seiten auf dasselbe Objekt verweisen.
[]
und []
sind zwei verschiedene (wenngleich äquivalente) Objekte, daher wird false zurückgegeben.
==
ist lose Gleichheit.
Es wird versucht, beide Operanden auf den gleichen Typ zu zwingen, wie in der spec beschrieben.
Es vergleicht jedoch auch Objekte durch referenzielle Identität.
Beachten Sie, dass das Vergleichen von String-Literalen wahr ergibt ("a" === "a"), aber der Vergleich von String-Objekten ergibt false: new String ("a ") === neuer String (" a "). Ich folge daraus, dass String-Literale nicht als Objekte behandelt und ähnlich wie Java "interniert" werden. –
@normc: Nein. Im Gegensatz zu Java hat Javascript eine Zeichenfolge _primitive_, genau wie Zahlen. 'new String (" a ")' boxiert es auf ein Objekt. Zum Beispiel: var a = "a"; a.b = 2; Alarm (a.b); // undefined' – SLaks
@normc: Boxed String Objekte werden fast nie benutzt; Alle String-Operationen geben Primitive zurück. – SLaks
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators –
@GeorgeCummins Nun, das wäre in den meisten Sprachen dasselbe. –
myHouse und yourHouse sind beide Häuser, aber myHouse! == yourHouse -> true – Xotic750