it-swarm.com.de

Was ist der richtige Weg, um die Gleichheit von Strings in JavaScript zu überprüfen?

Was ist der richtige Weg, um die Gleichheit zwischen Strings in JavaScript zu überprüfen?

767
JSS

immer  Verwenden Sie den Operator ==, bis Sie die Unterschiede und Auswirkungen der Verwendung der Operatoren === und === vollständig verstanden haben, da Sie so vor undurchsichtigen (nicht offensichtlichen) Fehlern und WTFs geschützt sind. Der "reguläre" ==-Operator kann aufgrund des internen Typenzwangs zu sehr unerwarteten Ergebnissen führen. Daher wird die Verwendung von === immer empfohlen.

Um einen Einblick in diese und andere "gute gegen schlechte" Teile von Javascript zu bekommen, lesen Sie bitte Mr. Douglas Crockford und seine Arbeit. Es gibt einen großartigen Google Tech Talk, in dem er viele gute Informationen zusammenfasst: http://www.youtube.com/watch?v=hQVTIJBZook


Update:

Die You Don't Know JS -Reihe von Kyle Simpson ist ausgezeichnet (und kostenlos online zu lesen). Die Serie geht auf die häufig missverstandenen Bereiche der Sprache ein und erklärt die "schlechten Teile", die Crockford Ihnen vorschlägt, zu vermeiden. Wenn Sie sie verstehen, können Sie sie richtig einsetzen und die Fallstricke vermeiden.

Das Buch " p & Going " enthält einen Abschnitt zu Equality mit dieser speziellen Zusammenfassung, wann die losen (==) vs strengen (===) Operatoren zu verwenden sind:

Um eine ganze Reihe von Details auf ein paar einfache Dinge zusammenzufassen und Ihnen zu zeigen, ob Sie == oder === in verschiedenen Situationen verwenden sollen, sind hier meine einfachen Regeln:

  • Wenn einer der Werte (auch als Seite bezeichnet) in einem Vergleich der Wert true oder false sein kann, vermeiden Sie == und verwenden Sie ===.
  • Wenn einer der Werte in einem Vergleich von diesen spezifischen Werten sein kann (0, "" oder [] - leeres Array), vermeiden Sie == und verwenden Sie ===.
  • In allen anderen Fällen können Sie sicher == verwenden. Es ist nicht nur sicher, sondern vereinfacht in vielen Fällen Ihren Code auf eine Weise, die die Lesbarkeit verbessert.

Ich empfehle Crockfords Vortrag immer noch Entwicklern, die nicht die Zeit investieren möchten, um Javascript wirklich zu verstehen - es ist ein guter Rat für Entwickler, die nur gelegentlich mit Javascript arbeiten.

577
STW

Wenn Sie wissen, dass es sich um Zeichenfolgen handelt, müssen Sie nicht nach dem Typ suchen.

"a" == "b"

Beachten Sie jedoch, dass Zeichenfolgenobjekte nicht gleich sind.

new String("a") == new String("a")

wird false zurückgeben.

Rufen Sie die valueOf () -Methode auf, um sie in ein Grundelement für String-Objekte zu konvertieren.

new String("a").valueOf() == new String("a").valueOf()

wird true zurückgeben

184
Anurag

Nur eine Ergänzung zu den Antworten: Wenn alle diese Methoden false zurückgeben, ist es möglich, dass sich links und/oder rechts von einer Zeichenfolge ein Leerzeichen befindet, auch wenn die Zeichenfolgen gleich sind. Fügen Sie am Ende der Zeichenfolgen einfach .trim() ein, bevor Sie Folgendes vergleichen:

if(s1.trim() === s2.trim())
{
    // your code
}

Ich habe Stunden verloren, um herauszufinden, was los ist. Hoffe das wird jemandem helfen!

49
akelec

was mich zu dieser Frage geführt hat, ist der padding und white-spaces

überprüfe meinen Fall

 if (title === "LastName")
      doSomething();

und Titel war " LastName"

enter image description here

vielleicht müssen Sie also die Funktion trim wie folgt verwenden

var title = $(this).text().trim();
18

Wenn Sie nicht genau wissen, wie Zwang funktioniert, sollten Sie == vermeiden und stattdessen den Identitätsoperator === verwenden. Aber Sie sollten - lesen Sie dies, um zu verstehen, wie es funktioniert .

Wenn Sie == verwenden, lassen Sie die Sprache einen Typenzwang für Sie ausführen. Beispiel:

"1" == 1 // true
"0" == false // true
[] == false // true

Wie Douglas Crockford in seinem Buch sagte:

Es ist immer besser, den Identitätsoperator zu verwenden.

13
ludico8

Es gibt tatsächlich zwei Möglichkeiten, wie Zeichenfolgen in Javascript erstellt werden können.

  1. var str = 'Javascript'; Dadurch wird ein primitiver Zeichenfolgenwert erstellt.

  2. var obj = new String('Javascript'); Hiermit wird ein Wrapper-Objekt vom Typ String erstellt.

    typeof str // string
    typeof obj // object

Der beste Weg, um auf Gleichheit zu prüfen, ist die Verwendung des Operators ===, da er sowohl den Wert als auch den Typ beider Operanden überprüft.

Wenn Sie die Gleichheit zwischen zwei Objekten überprüfen möchten, ist die Verwendung von String.prototype.valueOf der richtige Weg.

new String('javascript').valueOf() == new String('javascript').valueOf()
11
Abhishek

String Objects kann mit dem Trick JSON.stringyfy() überprüft werden.

var me = new String("me");
var you = new String("me");
var isEquel = JSON.stringify(me) === JSON.stringify(you);
console.log(isEquel);
5
Muhammad Usman