Nie jestem pewien, czy jest to składnia JS specyficzna dla Mozilli, ale często znajdowałem zmienne deklarowane w ten sposób, na przykład w dokumentach SDK dodatków :
var { Hotkey } = require("sdk/hotkeys");
i w różnych chrome JavaScript ( let
oświadczenie jest używane zamiast var
),
let { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components;
Wydało mi się to bardzo zagmatwane, ale nie jestem w stanie znaleźć żadnej dokumentacji na temat obu składni, nawet na MDN .
Odpowiedzi:
Obie są funkcjami JavaScript 1.7. Pierwsza to zmienne blokowe :
Drugi nazywa się destrukturyzacją :
Dla osób zaznajomionych z Pythonem składnia jest podobna do tej:
Pierwsza porcja kodu jest skrótem dla:
Możesz przepisać drugi fragment kodu jako:
źródło
var { Hotkey }
to , że jest odpowiednikiemvar { Hotkey: Hotkey }
. Dziękujemy za znalezienie dokumentacji!var Hotkey = require(...).Hotkey
? Czy to po prostu zapisywanie naciśnięć klawiszy?To, na co patrzysz, to destrukcyjne zadanie. To forma dopasowywania wzorców jak w Haskell.
Za pomocą przypisania destrukturyzującego można wyodrębnić wartości z obiektów i tablic oraz przypisać je do nowo zadeklarowanych zmiennych przy użyciu składni obiektu i literału tablicowego. Dzięki temu kod jest znacznie bardziej zwięzły.
Na przykład:
Powyższy kod jest równoważny z:
Podobnie dla tablic:
Jest to równoważne z:
Możesz także wyodrębnić i zmienić nazwę właściwości obiektu w następujący sposób:
Jest to równoważne z:
To wszystko.
źródło
var {a, b, c} = ascii;
składnię.Jest to destrukcyjne zadanie w Javascript i jest częścią standardu ES2015. Rozpakowuje lub wyodrębnia wartości z tablic lub właściwości z obiektów do odrębnych zmiennych. Np .: Zniszczenie macierzy
// z destrukturyzacją var [jeden, dwa, trzy] = foo
Np .: Destrukturyzacja obiektów
var o = {p: 42, q: true}; var {p, q} = o;
console.log (p); // 42 console.log (q); // prawdziwe
// Przypisz nowe nazwy zmiennych var {p: foo, q: bar} = o;
console.log (foo); // 42 console.log (bar); // prawdziwe
źródło
Dokumentacja do
let
oświadczenia znajduje się na MDN: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/letlet
jest podobny dovar
tego, że ogranicza zakres deklarowanej zmiennej. Pozwala zadeklarować zmienną wewnątrzif(){}
bloku (lub innego bloku) i mieć tę zmienną „widoczną” tylko wewnątrz tego bloku (JavaScript, do tej pory, ma zakres funkcji, a nie zakres blokowy, jak większość innych języków). Jest to więc wlet
zasadzie „poprawka” czegoś, z czym wiele osób ma problemy. Zauważ, że tihs to funkcja JavaScript 1.7.Nie znalazłem nic na
{Foo}
.źródło
{Foo}
: /{
i}
.