Kateri je pravilen način preverjanja enakosti nizov v javascriptu?
Kateri je pravilen način preverjanja enakosti nizov v javascriptu?
787
3
Kateri je pravilen način preverjanja enakosti nizov v javascriptu?
always Dokler v celoti ne razumete razlik in posledic uporabe operatorjev
==
in===
, uporabljajte operator===
, saj vas bo rešil nejasnih (neočitnih) napak in WTF. Operator "regular"==
ima lahko zelo nepričakovane rezultate zaradi notranje uskladitve tipov, zato je uporaba===
vedno priporočljiv pristop.Za vpogled v to in druge "dobre in slabe" dele Javascripta preberite nekaj o gospodu Douglasu Crockfordu in njegovem delu. Obstaja odličen Googlov tehnični pogovor, v katerem je povzel veliko dobrih informacij: [http://www.youtube.com/watch?v=hQVTIJBZook][1]
Posodobitev:
Serija You Don't Know JS Kyla Simpsona je odlična (in brezplačna za branje na spletu). Serija obravnava pogosto napačno razumljena področja jezika in pojasnjuje "slabe dele", ki se jim Crockford predlaga izogibati. Z njihovim razumevanjem jih lahko pravilno uporabljate in se izognete pastem.
Knjiga "Up & Going" vključuje poglavje o Equality s tem posebnim povzetkom o tem, kdaj uporabiti proste (
==
) in stroge (===
) operatorje:Crockford'ovo predavanje še vedno priporočam razvijalcem, ki ne želijo vlagati časa v resnično razumevanje Javascripta—je dober nasvet za razvijalca, ki le občasno dela v Javascriptu.
Če veste, da so nizi, vam ni treba preverjati tipa.
Vendar upoštevajte, da objekti z nizom ne bodo enaki.
vrne false.
Pokličite metodo valueOf(), da jo pretvorite v primitivno za objekte String,
vrne true
V javascriptu lahko niza ustvarite na dva načina.
var str = 'Javascript';
To ustvari primitivno vrednost niza.var obj = new String('Javascript');
To ustvari ovojni objekt tipaString
.typeof str // string
typeof obj // object
Zato je najboljši način za preverjanje enakosti uporaba operatorja
===
, saj preveri tako vrednost kot tip obeh operandov.Če želite preveriti enakost med dvema objektoma, potem je pravilen način uporaba
String.prototype.valueOf
.