Kateri je pravilen način preverjanja enakosti nizov v javascriptu?

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:

Če želite skrčiti veliko podrobnosti na nekaj preprostih ugotovitev in vam pomagati, da boste vedeli, ali v različnih situacijah uporabiti == ali ===, so tu moja preprosta pravila:

  • Če je lahko katera koli vrednost (t. i. stran) v primerjavi true ali false, se izogibajte == in uporabite ===.
  • Če je ena od vrednosti v primerjavi lahko ena od teh posebnih vrednosti (0, "" ali [] -- prazno polje), se izognite == in uporabite ===.
  • V vseh drugih primerih lahko varno uporabite ==. Ne samo, da je varna, v mnogih primerih tudi poenostavi kodo na način, ki izboljša berljivost.

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.

Komentarji (13)

Če veste, da so nizi, vam ni treba preverjati tipa.

"a" == "b"

Vendar upoštevajte, da objekti z nizom ne bodo enaki.

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

vrne false.

Pokličite metodo valueOf(), da jo pretvorite v primitivno za objekte String,

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

vrne true

Komentarji (6)

V javascriptu lahko niza ustvarite na dva načina.

  1. var str = 'Javascript'; To ustvari primitivno vrednost niza.

  2. var obj = new String('Javascript'); To ustvari ovojni objekt tipa String.

    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.

new String('javascript').valueOf() == new String('javascript').valueOf()
Komentarji (0)