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.