Cuando se declara una variable sin que se le asigne un valor, su valor inicial es undefined
.
¿Cómo se comprueba si un valor es undefined
en JavaScript?
La respuesta corta
En los navegadores modernos, puede comparar de forma segura la variable directamente a undefined
:
Algunas personas discuten la comparación con undefined
porque los navegadores antiguos permitían reasignar su valor así:
Después de esa reasignación, comparando con undefined
directamente ya no detectaría correctamente si a una variable se le asignó un valor.
Sin embargo, este comportamiento se corrigió en 2009 con ECMAScript 5:
En los navegadores modernos, » Ya no es posible reasignar el valor undefined
global.
¿Qué sucede si necesito admitir IE8 y versiones anteriores?
Generalmente, comparando directamente con la ONU definido todavía es seguro. No hay ninguna razón práctica para que una aplicación reasigne el valor de undefined
.
Thomas Eding lo demuestra con una analogía convincente:
Si aún está preocupado, hay dos formas de verificar si un valor no está definido, incluso si el undefined
global se ha sobrescrito.
Puede usar el operador void para obtener el valor de undefined
. Esto funcionará incluso si el valor global window.undefined
se ha sobreescrito:
El cero en este ejemplo no «tiene ningún significado especial, también puede usar 1
o function(){}
. void(anything)
siempre se evaluará como undefined
.
Alternativamente, puede usar el operador typeof para verificar con seguridad si un valor fue asignado. En lugar de comparar con el valor global undefined
, verifica si el tipo del valor «s es» indefinido «:
Tenga en cuenta que esto es ligeramente diferente de las opciones anteriores. Incluso si name
no fuera «declarado, typeof
todavía diría que no está definido. Si comparas una variable no declarada con undefined
o void(0)
obtendrás un ReferenceError.
Pero no «t use void (0) directamente
Evite usar void(0)
o typeof x === "undefined"
literalmente en el código. Estas expresiones no se explican por sí mismas y deben incluirse en una función isUndefined como esta:
Muchas bibliotecas de utilidades ya tienen esta funcionalidad incorporada, por ejemplo, hay un _.isUndefined
función en Underscore.js.