Comprobar undefined en JavaScript
Si escribes JavaScript regularmente, probablemente has necesitado comprobar si
una variable es undefined.
Pero, ¿cuál es la mejor manera de hacerlo?
La manera intuitiva
Cualquier programador con experiencia en otros lenguajes intuirá:
if (x === undefined) { ... }
Esto funciona sin problemas--casi.
La comparación directa con undefined funciona en todos los navegadores
modernos. Los navegadores antiguos, sin embargo, permitían la reasignación:
undefined = "new value";
Con esta reasignación, la comparación directa falla.
ECMAScript 5 arregló esto en 2009:
15.1.1.3 undefined
El valor deundefinedes undefined (ver 8.1). Esta propiedad tiene los atributos{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.
La manera "segura"
Si soportas navegadores antiguos y te preocupa la reasignación de undefined,
usa métodos alternativos.
Leyendo el tipo
El
operador typeof
devuelve "undefined" para valores undefined:
if (typeof x === "undefined") { ... }
Nota: typeof no lanza error para variables no declaradas.
Usando void
El operador void también devuelve undefined:
if (x === void(0)) { ... }
El cero no tiene significado especial. Como indica MDN:
El operador void evalúa la expresión dada y luego devuelve undefined.
Qué manera es mejor
Como consultor, aprendí la mejor respuesta: depende. Aquí van algunos consejos.
Sigue las convenciones existentes del código base. Para código nuevo solo en
navegadores modernos, usa comparación directa--es clara y legible incluso para
principiantes en JavaScript. Para soportar navegadores antiguos, crea una
función isUndefined con tu método preferido dentro. Esto expresa la intención
claramente.