Når en variabel erklæres uden at være tildelt en værdi, er dens indledende værdi undefined
.
Hvordan kontrollerer du, om en værdi er undefined
i JavaScript?
Det korte svar
I moderne browsere kan du sikkert sammenligne variablen direkte til undefined
:
Nogle mennesker argumenterer for at sammenligne med undefined
fordi gamle browsere tillod, at dens værdi blev tildelt igen som denne:
Efter den omfordeling sammenlignet med undefined
kunne direkte ikke længere registrere, om en variabel blev tildelt en værdi.
Denne adfærd blev dog rettet i 2009 med ECMAScript 5:
I moderne browsere er det ” er det ikke længere muligt at tildele den globale undefined
værdi igen.
Hvad hvis jeg har brug for at understøtte IE8 og ældre?
Generelt, sammenligner direkte med un defineret er stadig sikkert. Der er ingen praktisk grund til en ansøgning om at omfordele værdien af undefined
.
Thomas Eding demonstrerer dette med en overbevisende analogi:
Hvis du stadig er bekymret, er der to måder at kontrollere, om en værdi er udefineret, selvom den globale undefined
er blevet overskrevet.
Du kan bruge ugyldig operatør for at opnå værdien af undefined
. Dette fungerer, selvom den globale window.undefined
værdi er overskrevet:
Nul i dette eksempel har ikke nogen særlig betydning, du kan lige så godt bruge 1
eller function(){}
. void(anything)
evalueres altid til undefined
.
Alternativt kan du bruge typeof-operatøren til sikkert at kontrollere, om en værdi blev tildelt. I stedet for at sammenligne med den globale undefined
værdi kontrollerer du om værdien “s type er” udefineret “:
Bemærk, at dette er lidt anderledes end de tidligere valgmuligheder. Selvom name
ikke blev erklæret typeof
stadig ville sige, at det var udefineret. Hvis du sammenlignede en sortvariabel med undefined
eller void(0)
, ville du i stedet få en ReferenceError.
Men don t brug ugyldigt (0) direkte
Undgå at bruge void(0)
eller typeof x === "undefined"
ordret i kode. Disse udtryk er ikke selvforklarende og skal indpakkes i en ikke-defineret funktion som denne:
Mange hjælpebiblioteker har allerede denne funktion indbygget, for eksempel er der en _.isUndefined
-funktion i Underscore.js.