Não tenho certeza se esta é uma sintaxe JS específica do Mozilla, mas frequentemente encontro variáveis sendo declaradas dessa forma, por exemplo, em documentos SDK complementares :
var { Hotkey } = require("sdk/hotkeys");
e em vários Javascript do Chrome (a let
instrução está sendo usada no lugar de var
),
let { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components;
Achei muito confuso, mas não estou conseguindo encontrar nenhuma documentação sobre ambas as sintaxes, mesmo no MDN .
javascript
ecmascript-6
destructuring
javascript-1.7
sonho do tempo
fonte
fonte
Respostas:
Ambos são recursos do JavaScript 1.7. O primeiro são as variáveis de nível de bloco :
O segundo é chamado de desestruturação :
Para quem está familiarizado com Python, é semelhante a esta sintaxe:
O primeiro pedaço de código é uma abreviação de:
Você pode reescrever o segundo trecho de código como:
fonte
var { Hotkey }
é equivalente avar { Hotkey: Hotkey }
. Obrigado por localizar a documentação!var Hotkey = require(...).Hotkey
? Ou está apenas salvando pressionamentos de tecla?O que você está vendo é uma tarefa de desestruturação. É uma forma de correspondência de padrões como em Haskell.
Usando a atribuição de desestruturação, você pode extrair valores de objetos e matrizes e atribuí-los a variáveis recém-declaradas usando a sintaxe literal de objeto e matriz. Isso torna o código muito mais sucinto.
Por exemplo:
O código acima é equivalente a:
Da mesma forma para matrizes:
Isso é equivalente a:
Você também pode extrair e renomear uma propriedade de objeto da seguinte maneira:
Isso é equivalente a:
Isso é tudo que há para fazer.
fonte
var {a, b, c} = ascii;
sintaxe.Esta é uma atribuição destruidora em Javascript e faz parte do padrão ES2015. Ele descompacta ou extrai valores de arrays ou propriedades de objetos em variáveis distintas. Ex: Destruturação de Matriz
// com desestruturação var [um, dois, três] = foo
Ex: Destruturação de Objeto
var o = {p: 42, q: verdadeiro}; var {p, q} = o;
console.log (p); // 42 console.log (q); // verdade
// Atribuir novos nomes de variáveis var {p: foo, q: bar} = o;
console.log (foo); // 42 console.log (bar); // verdade
fonte
Há documentação para a
let
declaração no MDN: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/letlet
é semelhante avar
porque limita o escopo da variável declarada. Ele permite que você declare uma variável dentro de umif(){}
bloco (ou algum outro bloco) e tenha essa variável apenas "visível" dentro desse bloco (JavaScript, até agora, tem escopo de função e não escopo de bloco como a maioria das outras linguagens). Portanto, issolet
é basicamente uma "correção" para algo que muitas pessoas têm problemas. Observe que esse é um recurso do JavaScript 1.7.Não encontrei nada ligado
{Foo}
.fonte
{Foo}
: /{
e}
.