not - ¿Cómo puedo comparar un objeto JavaScript no existente con undefined sin obtener un error de referencia?
undefined javascript error (2)
Utilizar esta:
(typeof task === "undefined")
Cuando usa (task === undefined)
, Javascript necesita encontrar el valor de task
para ver si es el mismo que undefined
, pero no puede buscar el nombre porque no existe, lo que le da el error de referencia . typeof
es especial porque puede devolver con seguridad el tipo de un nombre que no existe.
Quiero boolean para salir de esta expresión
(task === undefined);
donde la task
es arbitraria y no aparece en el código en absoluto.
Sin embargo, cuando ejecuto esto en rhino, obtengo un error de referencia. Quiero verdad
¿Por qué no me vuelvo verdad?
Quiero comprobar si una variable particular ha sido definida. ¿Cómo lo hago entonces si esto no funciona?
Anexo a la respuesta aceptada para comprender por qué no funciona con algunos ejemplos que puede probar usted mismo en una consola javascript.
La comparación directa con un tipo indefinido solo funciona si existe la variable. A continuación se muestra el resultado que obtendrá del navegador Google Chrome:
> task === undefined
ReferenceError: task is not defined
Sin embargo, si la variable existe funcionará:
// continued from above
> var task
undefined
> task === undefined
true
Esta es la razón por la que deberías usar typeof
solution, ya que funcionará en todos los casos sin lanzar errores (y romper la ejecución del código javascript).
// continued from above
> typeof notavariable === ''undefined''
true
> typeof task === ''undefined''
true
Tenga en cuenta que no necesita la comprobación de tipo en algunos casos, como las propiedades en un objeto literal:
// continued from above
> var obj = {}
undefined
> obj.test === undefined
true
> obj.test = 1
1
> obj.test === undefined
false
Esto se debe a que las propiedades en un objeto se comportan más como valores en una matriz asociativa:
// continued from above
> obj["test"]
1
> obj["test"] === undefined
false
Sin embargo, no siempre puede estar seguro de que este es un caso en una función donde no tiene control sobre la entrada de argumentos:
// continued from above
> function TestFunc(arg1) { console.log(arg1) }
undefined
> TestFunc(notavariable)
ReferenceError: notavariable is not defined
> TestFunc(task)
undefined
undefined
> TestFunc(obj["lol"])
undefined
undefined
Espero que este ejercicio te ayude a entender el por qué de esta comparación.