w3schools es6 entre diferencias javascript ecmascript-6 let

es6 - object destructuring javascript



¿Cómo puedo verificar si una variable `let` ha sido declarada en ES6? (2)

parece que el izamiento no se aplica aquí.

No exactamente. La variable aún cubre el alcance completo, el enlace se crea cuando el alcance se ingresa al igual que con var s.

Pero tiene razón, a diferencia de var s, no se inicializa con undefined inmediatamente, solo cuando se evalúa la declaración de let . El área desde la parte superior del ámbito hasta allí se denomina zona muerta temporal : el identificador está vinculado, pero siempre arrojará un error de ReferenceError cuando se use.

¿Cómo puedo verificar de forma segura si la variable ha sido declarada?

No se puede, al igual que no se puede para var s 1 . No necesitas esto de todos modos.

1: ignoremos las variables globales 2 que se convierten en propiedades del objeto global aquí.
2: var / function / function* -declared variables, quiero decir. Los enlaces léxicos ( let , const ) de hecho no se convierten en propiedades globales.

A diferencia de las variables tradicionales declaradas en var, que se adjuntan a todo el ámbito de función circundante, independientemente de dónde aparezcan, las declaraciones se asocian al alcance del bloque pero no se inicializan hasta que aparecen en el bloque

Asi que :

console.log( a ); // undefined console.log( b ); // ReferenceError! var a; let b;

Por lo tanto, parece que el enganche no se aplica aquí.

Pregunta

Si es así, ¿cómo puedo verificar de forma segura si la variable ha sido declarada?

NB: la opción que veo es try / catch y, por supuesto, siempre pongo las variables de let primero al alcance. pero aun así mi pregunta permanece


Eso sería lo más cercano a lo que está buscando:

try { console.log(typeof mima); // or any other use of variable let mima = ''no ni ma''; } catch (error) { console.log(error); // “Uncaught ReferenceError: mima is not defined(…)” // and then taking some actions regarding the situation }

Sin embargo, su utilidad es bastante discutible. Pero si tuviera que verificar la variable let , iría con algo así. Sin embargo, tenga en cuenta que no puede crear con seguridad la variable que falta con let , ya que está rodeada por catch block. Pero no romperá el código.