No estoy seguro de si se trata de una sintaxis JS específica de Mozilla, pero a menudo encontré variables que se declaran de esta manera, por ejemplo, en los documentos complementarios del SDK :
var { Hotkey } = require("sdk/hotkeys");
y en varios JavaScript de Chrome ( let
se usa una declaración en lugar de var
),
let { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components;
Lo encontré muy confuso pero no puedo encontrar ninguna documentación sobre ambas sintaxis, incluso en MDN .
Respuestas:
Ambas son características de JavaScript 1.7. El primero son las variables a nivel de bloque :
El segundo se llama desestructuración :
Para aquellos familiarizados con Python, es similar a esta sintaxis:
El primer fragmento de código es una abreviatura de:
Puede reescribir el segundo fragmento de código como:
fuente
var { Hotkey }
es equivalente avar { Hotkey: Hotkey }
. ¡Gracias por localizar la documentación!var Hotkey = require(...).Hotkey
? ¿O es solo guardar las pulsaciones de teclas?Lo que estás viendo es una tarea de desestructuración. Es una forma de coincidencia de patrones como en Haskell.
Con la asignación de desestructuración, puede extraer valores de objetos y matrices y asignarlos a variables recién declaradas utilizando la sintaxis literal de objeto y matriz. Esto hace que el código sea mucho más conciso.
Por ejemplo:
El código anterior es equivalente a:
De manera similar para las matrices:
Esto es equivalente a:
También puede extraer y cambiar el nombre de una propiedad de objeto de la siguiente manera:
Esto es equivalente a:
Eso es todo al respecto.
fuente
var {a, b, c} = ascii;
sintaxis.Esta es una tarea destructiva en Javascript y es parte del estándar ES2015. Desempaqueta o extrae valores de matrices o propiedades de objetos en distintas variables. Por ejemplo: Desestructuración de matrices
// con desestructuración var [uno, dos, tres] = foo
Por ejemplo: Desestructuración de objetos
var o = {p: 42, q: verdadero}; var {p, q} = o;
console.log (p); // 42 console.log (q); // cierto
// Asignar nuevos nombres de variable var {p: foo, q: bar} = o;
console.log (foo); // 42 console.log (barra); // cierto
fuente
Hay documentación para la
let
declaración en MDN: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/letlet
es similar avar
porque limita el alcance de la variable declarada. Te permite declarar una variable dentro de unif(){}
bloque (o algún otro bloque) y tener esa variable solo "visible" dentro de ese bloque (JavaScript, hasta ahora, tiene alcance de función y no alcance de bloque como la mayoría de los otros lenguajes). Así quelet
es básicamente una "solución" para algo con lo que muchas personas tienen problemas. Tenga en cuenta que tihs es una función de JavaScript 1.7.No he encontrado nada en
{Foo}
.fuente
{Foo}
: /{
y}
.