Määrittelemättömyyden tarkistaminen JavaScript-ohjelmassa

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.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *