Kaip teisingai "JavaScript" tikrinti lygybę tarp eilučių?
always Kol iki galo nesuprasite ==
ir ===
operatorių naudojimo skirtumų ir pasekmių, naudokite ===
operatorių, nes jis padės išvengti neaiškių (neakivaizdžių) klaidų ir WTF. "įprastinis" ==
operatorius gali duoti labai netikėtų rezultatų dėl vidinio tipo suderinimo, todėl visada rekomenduojama naudoti ===
operatorių.
Jei norite sužinoti apie tai ir kitas "geras ir blogas" Javascript dalis, paskaitykite apie Douglasą Crockfordą ir jo darbą. Yra puikus "Google Tech Talk", kuriame jis apibendrina daug geros informacijos: [
Atnaujinimas:
Kyle Simpson You Don't Know JS serija yra puiki (ir nemokama skaityti internete). Serijoje nagrinėjamos dažniausiai klaidingai suprantamos kalbos sritys ir paaiškinamos "blogosios dalys", kurių Krokfordas siūlo vengti. Suprasdami jas, galėsite tinkamai jas vartoti ir išvengti spąstų.
Knygoje "Up & Going" yra skyrius apie lygybę, kuriame konkrečiai apibendrinama, kada naudoti laisvus (==
) ir griežtus (===
) operatorius:
Norėdamas sutrumpinti daugybę detalių iki keleto paprastų išvadų ir padėti jums sužinoti, ar įvairiose situacijose naudoti
==
, ar===
, pateikiu paprastas taisykles:
- Jei bet kuri lyginimo reikšmė (dar vadinama puse) gali būti
teisinga
arbaneteisinga
reikšmė, venkite==
ir naudokite===
.- Jei bet kuri lyginimo reikšmė gali būti viena iš šių konkrečių reikšmių (
0
,""
arba[]
-- tuščias masyvas), venkite==
ir naudokite===
.- Visais kitais atvejais galite naudoti
==
. Tai ne tik saugu, bet ir daugeliu atvejų supaprastina kodą ir pagerina jo skaitomumą.
Vis dar rekomenduoju Krokfordo'paskaitą kūrėjams, kurie nenori investuoti laiko, kad iš tikrųjų suprastų Javascript—ą. Tai geras patarimas kūrėjui, kuris tik retkarčiais dirba su Javascript.
Jei žinote, kad tai yra eilutės, nereikia tikrinti tipo.
"a" == "b"
Tačiau atkreipkite dėmesį, kad eilutės objektai nebus vienodi.
new String("a") == new String("a")
bus grąžinama false.
Skambinkite metodu valueOf(), kad paverstumėte jį į primityvųjį String objektą,
new String("a").valueOf() == new String("a").valueOf()
bus grąžinta true
Iš tikrųjų yra du būdai, kaip "javascript" galima kurti eilutes.
var str = 'Javascript';
Taip sukuriama primityvi eilutės reikšmė.
var obj = new String('Javascript');
Taip sukuriamas apvalkalinis objektas
tipo String
.
typeof str // string
typeof obj // object
Taigi geriausias būdas patikrinti lygybę yra naudoti operatorių ===
, nes jis tikrina ne tik abiejų operandų tipą, bet ir vertę.
Jei norite patikrinti dviejų objektų lygybę, tuomet teisingas būdas yra String.prototype.valueOf
.
new String('javascript').valueOf() == new String('javascript').valueOf()