Kun muuttuja ilmoitetaan ilman arvoa, sen alkuarvo on undefined
.
Kuinka tarkistat, onko arvo undefined
JavaScriptissä?
Lyhyt vastaus
Nykyaikaisissa selaimissa voit verrata muuttujaa turvallisesti suoraan osoitteeseen undefined
:
Jotkut ihmiset vastustavat vertailua undefined
, koska vanhat selaimet antoivat sen arvon määrittää uudelleen tällä tavalla:
Tämän uudelleenmäärityksen jälkeen verrataan undefined
suoraan ei enää tunnistaisi oikein, onko muuttujalle määritetty arvo.
Tämä ongelma kuitenkin korjattiin vuonna 2009 ECMAScript 5: llä:
Nykyaikaisissa selaimissa se ” globaalia undefined
-arvoa ei voida enää määrittää uudelleen.
Entä jos minun on tuettava IE8: ta ja vanhempia?
Yleensä verrataan suoraan un määritelty on edelleen turvallinen. Sovellukselle ei ole käytännön syytä määrittää uudelleen div-arvo undefined
.
Thomas Eding osoittaa tämän vakuuttavalla analogialla:
Jos olet edelleen huolissasi, on kaksi tapaa tarkistaa, onko arvo määrittelemätön, vaikka yleinen undefined
on korvattu.
Voit käyttää void-operaattori saadakseen undefined
-arvon. Tämä toimii, vaikka globaali window.undefined
-arvo olisi kirjoitettu liikaa:
Tämän esimerkin nollalla ei ole mitään erityistä merkitystä, voit yhtä hyvin käyttää 1
tai function(){}
. void(anything)
arvioi aina arvon undefined
.
Vaihtoehtoisesti voit käyttää typeof-operaattoria tarkistaaksesi, onko arvo annettiin. Sen sijaan, että vertaisit yleiseen undefined
-arvoon, tarkista, onko arvon s tyyppi ”määrittelemätön”:
Huomaa, että tämä eroaa hieman edellisistä vaihtoehdoista. Vaikka name
ei olisikaan ilmoitettu typeof
, se silti sanoisi sen olevan määrittelemätön. Jos verrattaisit ilmoittamatonta muuttujaa undefined
tai void(0)
, saat sen sijaan ReferenceErrorin.
Mutta älä ”t käytä suoraan void (0)
Vältä void(0)
tai typeof x === "undefined"
verbatim-koodin käyttöä. Nämä lausekkeet eivät ole itsestään selviä, ja ne on käärittävä isUndefined-funktioon näin:
Monissa apuohjelmakirjastoissa on jo tämä toiminto sisäänrakennettu, esimerkiksi siellä on _.isUndefined
-toiminto Underscore.js-tiedostossa.