variable not error comparar javascript referenceerror

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.