TORNAR

Comprovar undefined en JavaScript

2 min de lectura

Si escrius JavaScript més o menys regularment, en algun moment probablement t'enfrontis a una situació on hi havia una necessitat de comprovar si una variable és undefined.

Però, quina és la millor manera de fer-ho?

La manera intuïtiva

Qualsevol programador amb experiència en un altre llenguatge utilitzarà la intuïció per esbrinar:

if (x === undefined) { ... }

I això funcionarà sense cap problema, o gairebé.

Comparar directament amb undefined funcionarà en tots els navegadors moderns. Però els navegadors antics permetien que el seu valor fos reassignat així:

undefined = 'new value';

Amb aquesta reassignació, una computació directa no funcionarà com s'espera.

Aquest comportament va ser arreglat el 2009 amb ECMAScript 5 :

15.1.1.3 undefined
El valor de undefined és undefined (veure 8.1). Aquesta propietat té els atributs { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.

La manera "segura"

Si has de suportar navegadors antics i et preocupa que algú reassigni el valor de undefined hi ha altres maneres de fer la comprovació.

Llegint el tipus

Pots utilitzar l'operador typeof, que retornarà la cadena "undefined" perquè puguis comprovar-ho.

if (typeof x === "undefined") { ... }

Nota: L'operador typeof no llança un error si la variable no ha estat declarada.

Utilitzant void

Alternativament, pots utilitzar l'operador void per comprovar undefined. Per exemple:

if (x === void(0)) { ... }

En aquest exemple, el zero no té cap significat especial. Com s'indica a MDN:

L'operador void avalua l'expressió donada i després retorna undefined.

Quina manera és millor

En el meu temps com a consultor, vaig aprendre quina és la millor resposta per a aquest tipus de pregunta: depèn. Dependria del cas d'ús concret que tinguis, però puc donar-te alguns consells.

En general, tendeixo a utilitzar la convenció que ja està present al codi base. Però si estàs escrivint un codi nou que s'executarà només en navegadors moderns, suggeriria anar per la comparació directa (és clar i fàcil d'entendre també per a persones que no saben JavaScript). Per al suport de navegadors antics, recomano encaridament crear una funció isUndefined i utilitzar l'opció de la teva elecció dins. Llavors el codi expressarà el seu propòsit clarament a tothom.