javascript - solo - ¿Qué significan los corchetes en las sentencias `var{...}=...`?
validar nombre javascript expresion regular (3)
Ambas son funciones de JavaScript 1.7. El primero es las variables de nivel de bloque :
let
permite declarar variables, limitando su alcance al bloque, declaración o expresión en la que se usa. Esto es diferente de la palabra clavevar
, que define una variable de forma global o local para una función completa, independientemente del alcance del bloque.
El segundo se llama destructuring :
La asignación de desestructuración permite extraer datos de matrices u objetos mediante una sintaxis que refleja la construcción de matrices y literales de objetos.
...
Una cosa particularmente útil que puede hacer con la asignación de desestructuración es leer una estructura completa en una sola declaración, aunque hay una serie de cosas interesantes que puede hacer con ellas, como se muestra en la sección llena de ejemplos que siguen.
Para aquellos familiarizados con Python, es similar a esta sintaxis:
>>> a, (b, c) = (1, (2, 3))
>>> a, b, c
(1, 2, 3)
El primer fragmento de código es una abreviatura de:
var {Hotkey: Hotkey} = require("sdk/hotkeys");
// Or
var Hotkey = require("sdk/hotkeys").Hotkey;
Puede reescribir el segundo fragmento de código como:
let Cc = Components.classes;
let Ci = Components.interfaces;
let Cr = Components.results;
let Cu = Components.utils;
No estoy seguro de si esta es una sintaxis de JS específica de Mozilla, pero a menudo encuentro que las variables se declaran de esta manera, por ejemplo, en documentos de SDK adicionales :
var { Hotkey } = require("sdk/hotkeys");
y en varios Javascript de cromo (la declaración de let
se usa 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 .
Hay documentación para la declaración let
en MDN: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/let
let
es similar a var
en que limita el alcance de la variable declarada. Te permite declarar una variable dentro de un bloque if(){}
(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 bloquea el alcance como la mayoría de los otros lenguajes) . Entonces, el let
es básicamente una "solución" para algo con lo que mucha gente tiene problemas. Tenga en cuenta que tihs es una función de JavaScript 1.7.
No he encontrado nada en {Foo}
.
Lo que estás viendo es una tarea de desestructuración. Es una forma de emparejamiento de patrones como en Haskell.
Con la asignación de desestructuración puede extraer valores de objetos y matrices y asignarlos a variables recientemente declaradas utilizando la sintaxis literal del objeto y la matriz. Esto hace que el código sea mucho más breve.
Por ejemplo:
var ascii = {
a: 97,
b: 98,
c: 99
};
var {a, b, c} = ascii;
El código anterior es equivalente a:
var ascii = {
a: 97,
b: 98,
c: 99
};
var a = ascii.a;
var b = ascii.b;
var c = ascii.c;
Del mismo modo para matrices:
var ascii = [97, 98, 99];
var [a, b, c] = ascii;
Esto es equivalente a:
var ascii = [97, 98, 99];
var a = ascii[0];
var b = ascii[1];
var c = ascii[2];
También puede usar let
para extraer y cambiar el nombre de una propiedad del objeto de la siguiente manera:
var ascii = {
a: 97,
b: 98,
c: 99
};
let {a: A, b: B, c: C} = ascii;
Esto es equivalente a:
var ascii = {
a: 97,
b: 98,
c: 99
};
var A = ascii.a;
var B = ascii.b;
var C = ascii.c;
Eso es todo al respecto.