Me he encontrado con el siguiente código:
function test(data) {
if (data != null && data !== undefined) {
// some code here
}
}
Soy algo nuevo en JavaScript, pero, por otras preguntas que he estado leyendo aquí, tengo la impresión de que este código no tiene mucho sentido.
Obtendrá un error si accede a una variable indefinida en cualquier contexto que no seatypeof
.
Actualización: la (cita de) la respuesta anterior puede ser engañosa. Debería decir "una variable no declarada" , en lugar de "una variable indefinida" .
Como descubrí, en las respuestas de Ryan ♦ , maerics y nwellnhof , incluso cuando no se proporcionan argumentos para una función, sus variables para los argumentos siempre se declaran. Este hecho también demuestra que es incorrecto el primer elemento de la lista a continuación.
Según tengo entendido, se pueden experimentar los siguientes escenarios:
Se llamó a la función sin argumentos, por lo que sedata
creó una variable indefinida y se generó un errordata != null
.La función se llamó específicamente con
null
(oundefined
), como argumento, en cuyo casodata != null
ya protege el código interno,&& data !== undefined
inutilizándolo.La función se llamó con un argumento no nulo, en cuyo caso pasará trivialmente ambos
data != null
ydata !== undefined
.
P: ¿Es correcto mi entendimiento?
He intentado lo siguiente, en la consola de Firefox:
--
[15:31:31.057] false != null
[15:31:31.061] true
--
[15:31:37.985] false !== undefined
[15:31:37.989] true
--
[15:32:59.934] null != null
[15:32:59.937] false
--
[15:33:05.221] undefined != null
[15:33:05.225] false
--
[15:35:12.231] "" != null
[15:35:12.235] true
--
[15:35:19.214] "" !== undefined
[15:35:19.218] true
No puedo entender un caso en el que el data !== undefined
after data != null
pueda ser de alguna utilidad.
if(data)
significaría que no puede pasar false
o 0
como valores para data
.
if(typeof someUndefVar == whatever) -- works
y if(someUnderVar) -- error
.
data !== null && data !== undefined
, que es equivalente a lo data != null
que es equivalente a data != undefined
. La forma anterior tiende a ser favorecida ya que es más explícita sobre las condiciones, mientras que sería fácil pasar por alto ambas null
y undefined
se verificará con las dos condiciones posteriores.
undefined
IMO son un olor a código. No es una palabra clave protegida como null
, es una variable que no está definida. Esto es completamente válido y va a romper su código:undefined = 1
if (data)
. Es una forma mnemónica de Javascript para verificar si ladata
variable se evalúa como verdadera.undefined
,null
falso, 0, cadena vacía, matriz vacía y objeto (?) sin propiedades se evalúa como falso, el resto es verdadero.