Når en variabel blir deklarert uten å få tildelt en verdi, er den opprinnelige verdien undefined
.
Hvordan sjekker du om en verdi er undefined
i JavaScript?
Det korte svaret
I moderne nettlesere kan du trygt sammenligne variabelen direkte til undefined
:
Noen argumenterer for å sammenligne med undefined
fordi gamle nettlesere tillot at verdien ble tildelt på nytt slik:
Etter den omfordelingen, sammenlignet med undefined
ville direkte ikke lenger oppdage riktig om en variabel ble tildelt en verdi.
Denne oppførselen ble imidlertid løst i 2009 med ECMAScript 5:
I moderne nettlesere er det » er det ikke lenger mulig å tilordne den globale undefined
-verdien.
Hva om jeg trenger å støtte IE8 og eldre?
Generelt, sammenligne direkte med un definert er fortsatt trygt. Det er ingen praktisk grunn for en søknad om å tilordne verdien til undefined
.
Thomas Eding demonstrerer dette med en overbevisende analogi:
Hvis du fortsatt er bekymret, er det to måter å sjekke om en verdi er udefinert selv om den globale undefined
er overskrevet.
Du kan bruke ugyldig operatør for å oppnå verdien til undefined
. Dette vil fungere selv om den globale window.undefined
verdien er overskrevet:
Nullet i dette eksemplet har ikke noen spesiell betydning, du kan like godt bruke 1
eller function(){}
. void(anything)
evalueres alltid til undefined
.
Alternativt kan du bruke typeof-operatøren for å sjekke trygt om en verdi ble tildelt. I stedet for å sammenligne med den globale undefined
verdien, sjekker du om verdien «s type er» udefinert «:
Vær oppmerksom på at dette er litt annerledes enn de forrige alternativene. Selv om name
ikke var erklært typeof
fremdeles vil si at den er udefinert. Hvis du sammenlignet en ikke-deklarert variabel med undefined
eller void(0)
, vil du i stedet få en ReferenceError.
Men ikke t bruk void (0) direkte
Unngå å bruke void(0)
eller typeof x === "undefined"
ordrett i kode. Disse uttrykkene er ikke selvforklarende og bør pakkes inn i en ikke-definert funksjon som denne:
Mange verktøybiblioteker har allerede denne funksjonaliteten innebygd, for eksempel er det en _.isUndefined
-funksjon i Underscore.js.