Was ist der richtige Weg, um die Gleichheit zwischen Strings in JavaScript zu überprüfen?
immer Bis Sie die Unterschiede und Auswirkungen der Verwendung der Operatoren ==
und ===
vollständig verstanden haben, verwenden Sie den Operator ===
, da er Sie vor obskuren (nicht offensichtlichen) Fehlern und WTFs bewahrt. Der "reguläre" Operator ==
kann aufgrund der internen Typüberschneidung zu sehr unerwarteten Ergebnissen führen, daher ist die Verwendung von ===
immer die empfohlene Vorgehensweise.
Um einen Einblick in diese und andere "gute vs. schlechte" Teile von Javascript zu bekommen, lesen Sie bitte über Douglas Crockford und seine Arbeit nach. Es gibt einen großartigen Google Tech Talk, in dem er viele gute Informationen zusammenfasst: [
Aktualisierung:
Die Serie You Don't Know JS von Kyle Simpson ist ausgezeichnet (und kostenlos online zu lesen). Die Serie geht auf die häufig missverstandenen Bereiche der Sprache und erklärt die "schlechten Teile", die Crockford schlägt vor, Sie zu vermeiden. Wenn Sie sie verstehen, können Sie sie richtig nutzen und die Fallstricke vermeiden.
Das Buch "Up & Going" enthält einen Abschnitt über Gleichheit, mit dieser speziellen Zusammenfassung, wann die losen (==
) und wann die strengen (===
) Operatoren zu verwenden sind:
Um eine ganze Menge Details auf ein paar einfache Erkenntnisse zu reduzieren und Ihnen zu helfen, zu wissen, ob Sie
==
oder===
in verschiedenen Situationen verwenden sollten, sind hier meine einfachen Regeln:
- Wenn einer der beiden Werte (auch bekannt als Seite) in einem Vergleich der Wert "wahr" oder "falsch" sein könnte, vermeiden Sie "=" und verwenden Sie "=".
- Wenn einer der beiden Werte in einem Vergleich einer dieser spezifischen Werte sein könnte (
0
,""
, oder[]
-- leeres Feld), vermeide==
und verwende===
.- In allen anderen Fällen ist es sicher,
==
zu verwenden. Es ist nicht nur sicher, sondern in vielen Fällen vereinfacht es Ihren Code auf eine Weise, die die Lesbarkeit verbessert.
Ich empfehle Crockfords Vortrag immer noch für Entwickler, die nicht die Zeit investieren wollen, um Javascript wirklich zu verstehen—es ist ein guter Rat für einen Entwickler, der nur gelegentlich in Javascript arbeitet.
Wenn Sie wissen, dass es sich um Zeichenketten handelt, brauchen Sie nicht auf den Typ zu achten.
"a" == "b"
Beachten Sie jedoch, dass String-Objekte nicht gleich sein werden.
new String("a") == new String("a")
wird false zurückgeben.
Rufen Sie die Methode valueOf() auf, um sie in ein Primitiv für String-Objekte umzuwandeln,
new String("a").valueOf() == new String("a").valueOf()
wird true zurückgeben
Es gibt eigentlich zwei Möglichkeiten, in denen Zeichenfolgen in Javascript gemacht werden können.
var str = 'Javascript';
Dies erzeugt einen primitiven String-Wert.
var obj = new String('Javascript');
Dies erzeugt ein Wrapper-Objekt
vom Typ String
.
typeof str // string
typeof obj // Objekt
Der beste Weg, die Gleichheit zu prüfen, ist also der Operator ===
, da er sowohl den Wert als auch den Typ beider Operanden prüft.
Wenn Sie die Gleichheit zwischen zwei Objekten prüfen wollen, ist die Verwendung von String.prototype.valueOf
der richtige Weg.
new String('javascript').valueOf() == new String('javascript').valueOf()