ECMAScript-yhtäläisyyden laskutoimituslauseet
- Edellinen sivu Suhdetoiminnallinen operaattori
- Seuraava sivu Ehdollinen operaattori
Kaksi muuttujan vertaamista on ohjelmistokehityksessä erittäin tärkeä operaatio. Kun käsitellään alkuperäisiä arvoja, tämä operaatio on melko yksinkertainen, mutta kun on kyse objekteista, tehtävä on hieman monimutkaisempi.
ECMAScript tarjoaa kaksi paraagriikkaa yhtälöllisyysopeuttajia: yhtälö ja ei-yhtälö käsittelevät alkuperäisiä arvoja, täysin yhtälö ja täysin ei-yhtälö käsittelevät objekteja.
Yhtälö ja ei-yhtälö
ECMAScriptissä yhtälö symboloidaan kahdella yhtälöllä (==), ja se palauttaa true vain, jos kaksi operaattoria ovat yhtä suuret. Ei-yhtälö symboloidaan huutomerkillä ja yhtälöllä (!=), ja se palauttaa true vain, jos kaksi operaattoria eivät ole yhtä suuret. Jotta voidaan määrittää, ovatko kaksi operaattoria yhtä suuret, molemmat operaattorit suorittavat tyyppimuunnoksen.
Tyyppimuunnosten säännöt ovat seuraavat:
- Jos yksi laskennan operaattoreista on Boolean-arvo, muunnetaan se lukuarvoksi ennen yhtälöllisyyden tarkistamista. false muunnetaan arvoksi 0, true arvoksi 1.
- Jos yksi laskennan operaattoreista on merkkijono ja toinen luku, yritetään muuntaa merkkijono luvuksi ennen yhtälöllisyyden tarkistamista.
- Jos yksi laskennan operaattoreista on objekti ja toinen merkkijono, yritetään muuntaa objekti merkkijonoksi ennen yhtälöllisyyden tarkistamista.
- Jos yksi laskennan operaattoreista on objekti ja toinen luku, yritetään muuntaa objekti luvuksi ennen yhtälöllisyyden tarkistamista.
Tarkistettaessa yhtälöllisyyttä, tämä operaattori noudattaa seuraavia sääntöjä:
- Arvot null ja undefined ovat yhtä suuret.
- Kun tarkistetaan yhtälöllisyyttä, null ja undefined ei voida muuntaa muihin arvoihin.
- Jos jokin laskennan operaattori on NaN, yhtälö palauttaa false ja ei-yhtälö palauttaa true.
- Jos molemmat laskennan operaattorit ovat objekteja, verrataan niiden viittausarvoja. Jos molemmat operaattorit osoittavat samaa objektia, yhtälö palauttaa true, muuten operaattorit eivät ole yhtä suuret.
Tärkeä huomio:Vaikka molemmat luvut ovat NaN, yhtälö palauttaa false, koska säännön mukaan NaN ei ole yhtä suuri kuin NaN.
Seuraavassa taulukossa luetellaan joitakin erityistapauksia ja niiden tuloksia:
ilmaisu | arvo |
---|---|
null == undefined | true |
"NaN" == NaN | false |
5 == NaN | false |
NaN == NaN | false |
NaN != NaN | true |
false == 0 | true |
true == 1 | true |
true == 2 | false |
undefined == 0 | false |
null == 0 | false |
"5" == 5 | true |
Täysin yhtä ja ei-täysin yhtä
Yhtä ja ei-yhtä operaattorit ovat samanlaisia kuin täysin yhtä ja ei-täysin yhtä operaattorit. Nämä operaattorit tekevät saman kuin yhtä ja ei-yhtä operaattorit, mutta ne eivät suorita muunnosta ennen kuin tarkistavat yhtäkkyyden.
Täysin yhtä operaattori symboloidaan kolmella yhtä merkkiä (===), ja se palauttaa true vain silloin, kun operaattorit ovat yhtä suuria eivätkä vaadi muunnosta.
Esimerkiksi:
var sNum = "66"; var iNum = 66; alert(sNum == iNum); // Tulostaa "true" alert(sNum === iNum); // Tulostaa "false"
Tässä koodissa ensimmäinen alert käyttää yhtä merkkiä verrataksaan merkkijonoa "66" numeroon 66, ja tulostaa "true". Kuten edellä mainittiin, tämä johtuu siitä, että merkkijono "66" muunnetaan numeroksi 66, ja sitten se verrataan toiseen numeroon 66. Toisen alert käyttää täysin yhtä merkkiä ilman muunnosta verrataksaan merkkijonoa ja numeroa, tietysti, merkkijono ei ole yhtä suuri kuin numero, joten tulostaa "false".
Ei-yhtä operaattori symboloidaan huudahdusmerkki ja kaksi yhtä merkkiä (!==), ja se palauttaa true vain silloin, kun operaattorit eivät vaadi muunnosta eivätkä ole erilaisia.
Esimerkiksi:
var sNum = "66"; var iNum = 66; alert(sNum != iNum); // Tulostaa "false" alert(sNum !== iNum); // Tulostaa "true"
Tässä, ensimmäinen alert käyttää ei-yhtä operaattoria, muuntaa merkkijonon "66" numeroksi 66, jotta se on yhtä suuri kuin toinen operaattori 66. Siksi laskentatulos on "false", koska kaksi operaattoria ovat yhtä suuria. Toisen alert käyttää ei-yhtä operaattoria. Tämä operaatio kysyy: "sNum" ja "iNum" ovatko erilaisia? Tämän kysymyksen vastaus on: kyllä (true), koska sNum on merkkijono ja iNum on numero, ne ovat luonnollisesti erilaisia.
- Edellinen sivu Suhdetoiminnallinen operaattori
- Seuraava sivu Ehdollinen operaattori