ECMAScriptin suhteelliset operaattorit
- Edellinen sivu Lisäyslaskutoimitustapahtumat
- Seuraava sivu Yhteysopeuttavat laskutoimitustapahtumat
Suhteelliset operaattorit suorittavat vertailun. Jokainen suhteellinen operaattori palauttaa Boolean-arvon.
Tavallinen vertailutapa
Suhteelliset operaattorit kuten pienempi, suurempi, pienempi tai yhtä suuri ja suurempi tai yhtä suuri suorittavat kahden luvun vertailun, joka on samanlaista kuin aritmeettinen vertailu.
Jokainen suhteellinen operaattori palauttaa Boolean-arvon:
var bResult1 = 2 > 1 //true var bResult2 = 2 < 1 //false
Kuitenkin, kun kahdelle merkkijonolle sovelletaan suhteellista operaattoria, niiden käyttäytyminen on erilainen. Monet ihmiset ajattelevat, että pienempi tarkoittaa "kirjainjärjestyksessä eturemmalla" ja suurempi tarkoittaa "kirjainjärjestyksessä myöhemmällä", mutta tämä ei ole totta. Merkkijonoissa ensimmäisen merkkijonon jokaisen merkin koodi verrataan toisen merkkijonon vastaavan sijainnin merkin koodiin arvovertailuna. Kun tämä vertailu on tehty, palautetaan Boolean-arvo. Ongelma on, että isojen kirjainten koodit ovat pienempiä kuin pienikirjainten koodit, mikä tarkoittaa, että voi tapahtua seuraavaa:
var bResult = "Blue" < "alpha"; alert(bResult); // Tulostaa true
Esimerkissä yllä merkkijono "Blue" on pienempi kuin "alpha", koska kirjain B:n merkkikoodi on 66 ja kirjain a:n merkkikoodi on 97. Jos haluat saada oikean kirjainjärjestyksen, sinun täytyy muuntaa molemmat merkkijonot samanlaiselle isokirjoitukselle (kokonaiskuvalliselle) tai pienikirjoitukselle ja sitten tehdä vertailu:
var bResult = "Blue".toLowerCase() < "alpha".toLowerCase(); alert(bResult); // Tulostaa false
Muunna molemmat operaattorit pieniksi kirjaimiksi, varmistaaksesi, että "alpha" tunnetaan oikein olevan kirjainjärjestyksessä ennen "Blue".
Vertaile lukuja ja merkkijonoja
Toinen monimutkainen tilanne tapahtuu, kun verrataan kahden merkkijonona olevia lukuja, kuten:
var bResult = "25" < "3"; alert(bResult); // Tulostaa "true"
Yllä oleva koodi verrataan merkkijonoja "25" ja "3". Molemmat operaattorit ovat merkkijonoja, joten verrataan niiden merkkikoodia ("2" merkkikoodi on 50, "3" merkkikoodi on 51).
Mutta mikä tapahtuu, jos jokin operaattori muunnetaan numeroksi, niin tuloksena on mielenkiintoinen:
var bResult = "25" < 3; alert(bResult); // Tulostaa "false"
Tässä merkkijono "25" muunnetaan numeroksi 25 ja verrataan siihen numeroon 3, tuloksena ei ole yllätys.
Kun verrataan lukuun ja merkkijonoon, ECMAScript muuntaa aina merkkijonon numeroksi ja sitten verrataan niitä numerollaan.
Mutta mitä, jos merkkijono ei voi muuntaa numeeksi? Tarkastele seuraavaa esimerkkiä:
var bResult = "a" < 3; alert(bResult);
Voitko ennustaa, mitä tämä koodi tulostaa? Kirjain "a" ei voi muuntaa merkitylliseksi numeroksi. Mutta jos sitä kutsutaan parseInt() -menetelmällä, palautus on NaN. Säännön mukaan kaikki NaN sisältävät suhteelliset operaattorit palauttavat false, joten tämä koodi myös tulostaa false:
var bResult = "a" >= 3; alert(bResult);
Yleensä, jos operaation kahden arvon välinen vertailu palauttaa false, niin suurempi tai yhtä suuri kuin operaation tulisi palauttaa true, mutta jos jokin luku on NaN, tilanne ei ole näin.
- Edellinen sivu Lisäyslaskutoimitustapahtumat
- Seuraava sivu Yhteysopeuttavat laskutoimitustapahtumat