Wanneer een variabele wordt gedeclareerd zonder dat er een waarde is toegewezen, is de oorspronkelijke waarde undefined
.
Hoe controleer je of een waarde undefined
is in JavaScript?
Het korte antwoord
In moderne browsers kun je de variabele veilig vergelijken rechtstreeks naar undefined
:
Sommige mensen pleiten tegen vergelijking met undefined
omdat oude browsers toestonden dat de waarde ervan op deze manier opnieuw werd toegewezen:
Na die nieuwe toewijzing, in vergelijking met undefined
zou niet langer correct detecteren of aan een variabele een waarde was toegewezen.
Dit gedrag werd echter in 2009 opgelost met ECMAScript 5:
In moderne browsers ” Het is niet langer mogelijk om de globale undefined
waarde opnieuw toe te wijzen.
Wat moet ik doen als ik IE8 en ouder moet ondersteunen?
In het algemeen, direct vergelijken met un gedefinieerd is nog steeds veilig. Er is geen praktische reden voor een toepassing om de waarde van undefined
opnieuw toe te wijzen.
Thomas Eding demonstreert dit met een overtuigende analogie:
Als u zich nog steeds zorgen maakt, zijn er twee manieren om te controleren of een waarde niet gedefinieerd is, zelfs als de globale undefined
is overschreven.
U kunt de void-operator om de waarde van undefined
te verkrijgen. Dit werkt zelfs als de globale window.undefined
-waarde is overschreven:
De nul in dit voorbeeld heeft geen “speciale betekenis, je zou net zo goed 1
of function(){}
. void(anything)
evalueert altijd naar undefined
.
U kunt ook de operator typeof gebruiken om veilig te controleren of een waarde kreeg toegewezen. In plaats van te vergelijken met de globale undefined
waarde, controleer je of de waarde “s type” undefined “is:
Merk op dat dit enigszins verschilt van de vorige opties. Zelfs als name
niet “niet werd verklaard” typeof
zou nog steeds zeggen dat het “ongedefinieerd is”. Als je een niet-gedeclareerde variabele zou vergelijken met undefined
of void(0)
, zou je in plaats daarvan een ReferenceError krijgen.
Maar niet gebruik void (0) direct
Vermijd het gebruik van void(0)
of typeof x === "undefined"
woordelijk in code. Deze uitdrukkingen “spreken niet voor zichzelf en zouden als volgt in een isUndefined-functie moeten worden verpakt:
Veel hulpprogramma-bibliotheken hebben deze functionaliteit al ingebouwd, er is bijvoorbeeld een _.isUndefined
-functie in Underscore.js.