Wat is de juiste manier om te controleren op gelijkheid tussen reeksen in JavaScript?
altijd Totdat je de verschillen en implicaties van het gebruik van de ==
en ==
operatoren volledig begrijpt, gebruik de ===
operator omdat het je behoedt voor obscure (niet voor de hand liggende) bugs en WTFs. De "regular" ==
operator kan onverwachte resultaten geven door de interne type-coercion, dus het gebruik van ==
is altijd aan te raden.
Voor inzicht in dit, en andere "goede vs. slechte" delen van Javascript lees meer over de heer Douglas Crockford en zijn werk. Er is een geweldige Google Tech Talk waar hij veel goede info samenvat: [
Update:
De You Don't Know JS serie van Kyle Simpson is uitstekend (en gratis online te lezen). De serie gaat in op de vaak verkeerd begrepen gebieden van de taal en legt de "slechte delen" dat Crockford suggereert dat u te vermijden. Door ze te begrijpen kun je er op de juiste manier gebruik van maken en de valkuilen vermijden.
Het "Up & Going" boek bevat een sectie over Gelijkheid, met deze specifieke samenvatting van wanneer je de losse (==
) vs strikte (==
) operatoren moet gebruiken:
Om een heleboel details terug te brengen tot een paar simpele takeaways, en je te helpen weten of je
==
of==
in verschillende situaties moet gebruiken, zijn hier mijn eenvoudige regels:
- Als een van beide waarden (aka kant) in een vergelijking de
true
offalse
waarde kan zijn, vermijd==
en gebruik==
.- Als een van beide waarden in een vergelijking een van deze specifieke waarden kan zijn (
0
,""
, of[]
-- lege array), vermijd==
en gebruik==
.- In alle andere gevallen is het veilig om
==
te gebruiken. Niet alleen is het veilig, maar in veel gevallen vereenvoudigt het uw code op een manier die de leesbaarheid verbetert.
Ik raad Crockford's talk nog steeds aan voor ontwikkelaars die'niet de tijd willen investeren om Javascript echt te begrijpen—het'is goed advies voor een ontwikkelaar die slechts af en toe in Javascript werkt.
Als je weet dat het strings zijn, dan is het niet nodig om op type te controleren.
"a" == "b"
Merk echter op dat string-objecten niet gelijk zullen zijn.
new String("a") == new String("a")
zal false teruggeven.
Roep de valueOf() methode op om het te converteren naar een primitieve voor String objecten,
new String("a").valueOf() == new String("a").valueOf()
zal true teruggeven
Er zijn eigenlijk twee manieren waarop strings kunnen worden gemaakt in javascript.
var str = 'Javascript';
Dit creëert een primitieve string waarde.
var obj = new String('Javascript');
Dit creëert een wrapper object
van het type String
.
typeof str // string
typeof obj // object
Dus de beste manier om te controleren op gelijkheid is met behulp van de ==
operator, omdat deze zowel de waarde als het type van beide operanden controleert.
Als je wilt controleren op gelijkheid tussen twee objecten dan is het gebruik van String.prototype.valueOf
de juiste manier.
new String('javascript').valueOf() == new String('javascript').valueOf()