Lorsquune variable est déclarée sans avoir de valeur attribuée, sa valeur initiale est undefined
.
Comment vérifier si une valeur est undefined
en JavaScript?
La réponse courte
Dans les navigateurs modernes, vous pouvez comparer la variable en toute sécurité directement à undefined
:
Certaines personnes sopposent à la comparaison avec undefined
parce que les anciens navigateurs permettaient à sa valeur dêtre réaffectée comme ceci:
Après cette réaffectation, comparez avec undefined
directement ne détecte plus correctement si une variable a été attribuée une valeur.
Cependant, ce comportement a été corrigé en 2009 avec ECMAScript 5:
Dans les navigateurs modernes, il » Il nest plus possible de réattribuer la valeur globale undefined
.
Que faire si je dois prendre en charge IE8 et plus ancien?
En général, comparer directement à un défini est toujours sûr. Il ny a aucune raison pratique pour une application de réaffecter la valeur de undefined
.
Thomas Eding le démontre avec une analogie convaincante:
Si vous êtes toujours concerné, il y a deux façons de vérifier si une valeur nest pas définie même si le global undefined
a été écrasé.
Vous pouvez utiliser le void pour obtenir la valeur de undefined
. Cela fonctionnera même si la valeur globale window.undefined
a été écrasée:
Le zéro dans cet exemple na pas de signification particulière, vous pouvez tout aussi bien utiliser 1
ou function(){}
. void(anything)
sera toujours évalué à undefined
.
Vous pouvez également utiliser lopérateur typeof pour vérifier en toute sécurité si une valeur était assigné. Au lieu de comparer à la valeur globale undefined
vous vérifiez si la valeur « s type est » undefined « :
Notez que ceci est légèrement différent des options précédentes. Même si name
na pas été déclaré, typeof
dirait toujours quil « est indéfini. Si vous comparez une variable non déclarée à undefined
ou void(0)
, vous obtiendrez à la place une ReferenceError.
Mais ne « t utilisez directement void (0)
Évitez dutiliser void(0)
ou typeof x === "undefined"
verbatim dans le code. Ces expressions ne sont pas explicites et doivent être enveloppées dans une fonction isUndefined comme celle-ci:
De nombreuses bibliothèques dutilitaires intègrent déjà cette fonctionnalité, par exemple il ya un _.isUndefined
fonction dans Underscore.js.