Was ist der richtige Weg, um die Gleichheit zwischen Strings in JavaScript zu überprüfen?
javascript
string
JSS
quelle
quelle
{} == "[object Object]"
zum Beispiel als wahr ausgewertet wird.String().equals()
ist keine Methode in JS ...Antworten:
ImmerBis Sie die Unterschiede und Auswirkungen der Verwendung derOperatoren==
undvollständig verstanden haben===
, verwenden Sie den===
Operator, da er Sie vor unklaren (nicht offensichtlichen) Fehlern und WTFs bewahrt. Der "normale"==
Operator kann aufgrund des internen Typ-Zwangs sehr unerwartete Ergebnisse erzielen. Daher ist die Verwendung===
immer der empfohlene Ansatz.Um einen Einblick in diese und andere "gute gegen schlechte" Teile von Javascript zu erhalten, lesen Sie 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
Aktualisieren:
Die JS- Serie You Don't Know 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 vermeiden sollte. Wenn Sie sie verstehen, können Sie sie richtig nutzen und die Fallstricke vermeiden.
Das Buch " Up & Going " enthält einen Abschnitt über Gleichstellung mit dieser spezifischen Zusammenfassung, wann die Operatoren lose (
==
) und strenge (===
) zu verwenden sind:Ich empfehle Crockfords Vortrag weiterhin Entwicklern, die nicht die Zeit investieren möchten, um Javascript wirklich zu verstehen - ein guter Rat für Entwickler, die nur gelegentlich in Javascript arbeiten.
quelle
if (typeof foo == "string")
===
Operator zu verwenden und sich nie Gedanken darüber zu machen, ob ich wirklich 100% sicher bin, dass sich==
das so verhält, wie ich es mir vorstelle.++
/--
) zu verwenden.++
oder--
oder einzelne Zeilenif/else
Anweisungen odercontinue
oder dennew
Betreiber oder eine andere Zahl von völlig legitim Code Praktiken dass Crockford „schädlich“ hat angesehen. Und natürlich nie jemals betrachtet auch nur zu denken über die Verwendungeval
oderwith
auch wenn ihre Tücken sind gut verstanden. Und hast du die nächste Version von JS gesehen? Eine strengere Syntax und eine Handvoll Hilfsfunktionen, von denen einige schon seit Jahren im Umlauf sind, sind alles, was wir nach all dieser Zeit bekommen. Die Syntax hat sich überhaupt nicht weiterentwickelt. Wenn Crockford dahinter steckt, war es eine schlechte Sache.Wenn Sie wissen, dass es sich um Zeichenfolgen handelt, müssen Sie nicht nach dem Typ suchen.
Beachten Sie jedoch, dass Zeichenfolgenobjekte nicht gleich sind.
wird false zurückgeben.
Rufen Sie die valueOf () -Methode auf, um sie in ein Grundelement für String-Objekte zu konvertieren.
wird true zurückgeben
quelle
new String("a") == "a"
ist wahr (würde aber nicht mit sein===
), da die linke Seite in einen primitiven Zeichenfolgenwert konvertiert wird.new String("a") == new String("a")
,new String("a") === new String("b")
,new String("a") === new String("a")
werden alle zurückfalse
, da man mit Referenzen auf Objekte der es zu tunString
Klasse, nicht Primitive Artstring
.new String(foo)
Erstellt ein String- Objekt undString(foo)
konvertiert foo in ein String-Grundelement.Nur eine Ergänzung zu den Antworten: Wenn alle diese Methoden false zurückgeben, ist es möglich, dass links und / oder rechts von einer Zeichenfolge ein Leerzeichen steht, auch wenn Zeichenfolgen gleich zu sein scheinen.
.trim()
Setzen Sie also vor dem Vergleich einfach ein am Ende der Zeichenfolgen:Ich habe Stunden verloren, um herauszufinden, was los ist. Hoffe das wird jemandem helfen!
quelle
fetch
). Vielen Dank.Was mich zu dieser Frage geführt hat, ist das
padding
undwhite-spaces
Überprüfen Sie meinen Fall
und Titel war
" LastName"
quelle
.toString().trim()
in TypescriptWenn Sie nicht wirklich wissen, wie Zwang funktioniert, sollten Sie stattdessen
==
den Identitätsoperator vermeiden und verwenden===
. Aber Sie sollten dies lesen, um zu verstehen, wie es funktioniert .Wenn Sie verwenden
==
, lassen Sie die Sprache eine Art Zwang für Sie ausüben, zum Beispiel:Wie Douglas Crockford in seinem Buch sagte:
quelle
{}==" "
gab mirUnexpected token ==
was ist der richtige Weg, um es zu tun?Es gibt zwei Möglichkeiten, wie Zeichenfolgen in Javascript erstellt werden können.
var str = 'Javascript';
Dadurch wird ein primitiver Zeichenfolgenwert erstellt.var obj = new String('Javascript');
Dadurch wird ein Wrapper-Objekt vom Typ erstelltString
.typeof str // string
typeof obj // object
Der beste Weg, um die Gleichheit zu überprü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,
String.prototype.valueOf
ist die Verwendung der richtige Weg.quelle
String
Objects
kann mitJSON.stringyfy()
Trick überprüft werden .quelle
In Anbetracht der Tatsache, dass beide Zeichenfolgen sehr groß sein können, gibt es zwei Hauptansätze
bitwise search
undlocaleCompare
Ich habe diese Funktion empfohlen
quelle
Der einfachste Weg, dies zu tun, besteht darin, einen ternären Operator wie folgt zu verwenden:
Wenn sich die zu vergleichende Zeichenfolge jedoch in einem Array befindet, verwenden Sie den es6-Filter
Das obige wird Ihr stringArray und den dazu passenden String aus dem Array überprüfen, das wir in unserem Fall "Jungen" ausgewählt haben.
quelle
Ich habe beim Testen eine alternative Lösung gefunden. Sie können die Funktion für den String-Prototyp verwenden.
funktioniert gut in Chrome-Browsern
quelle
==
.