首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >` `var { ... }= ...`语句中的花括号是做什么的?

` `var { ... }= ...`语句中的花括号是做什么的?
EN

Stack Overflow用户
提问于 2013-03-08 17:44:52
回答 4查看 26.8K关注 0票数 132

我不确定这是否是特定于Mozilla的JS语法,但我经常发现变量是这样声明的,例如,在add-on SDK docs

代码语言:javascript
复制
var { Hotkey } = require("sdk/hotkeys");

并且在各种chrome Javascript (用let语句代替var)中,

代码语言:javascript
复制
let { classes: Cc, interfaces: Ci, results: Cr, utils: Cu }  = Components;

我发现它非常混乱,但我找不到任何关于这两种语法的文档,甚至在MDN上也找不到。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-08 18:09:33

它们都是JavaScript 1.7的特性。第一个是

let允许您声明变量,将其作用域限制为使用它的块、语句或表达式。这与var关键字不同,后者全局定义变量,或局部定义整个函数,而不考虑块范围。

第二个被称为

解构赋值允许使用与数组和对象字面量的构造类似的语法从数组或对象中提取数据。

..。

使用解构赋值可以做的一件特别有用的事情是在一条语句中读取整个结构,尽管您可以使用它们做一些有趣的事情,如下面的示例部分所示。

对于那些熟悉Python的人来说,它的语法类似于:

代码语言:javascript
复制
>>> a, (b, c) = (1, (2, 3))
>>> a, b, c
(1, 2, 3)

第一个代码块是以下代码的简写:

代码语言:javascript
复制
var {Hotkey: Hotkey} = require("sdk/hotkeys");
// Or
var Hotkey = require("sdk/hotkeys").Hotkey;

您可以将第二个代码块重写为:

代码语言:javascript
复制
let Cc = Components.classes;
let Ci = Components.interfaces;
let Cr = Components.results;
let Cu = Components.utils;
票数 83
EN

Stack Overflow用户

发布于 2013-03-08 18:44:27

你看到的是一个解构任务。它是pattern matching的一种形式,就像在Haskell中一样。

使用解构赋值,您可以从对象和数组中提取值,并使用对象和数组文字语法将它们赋给新声明的变量。这使得代码更加简洁。

例如:

代码语言:javascript
复制
var ascii = {
    a: 97,
    b: 98,
    c: 99
};

var {a, b, c} = ascii;

上面的代码相当于:

代码语言:javascript
复制
var ascii = {
    a: 97,
    b: 98,
    c: 99
};

var a = ascii.a;
var b = ascii.b;
var c = ascii.c;

对于数组也是如此:

代码语言:javascript
复制
var ascii = [97, 98, 99];

var [a, b, c] = ascii;

这相当于:

代码语言:javascript
复制
var ascii = [97, 98, 99];

var a = ascii[0];
var b = ascii[1];
var c = ascii[2];

还可以提取并重命名对象特性,如下所示:

代码语言:javascript
复制
var ascii = {
    a: 97,
    b: 98,
    c: 99
};

var {a: A, b: B, c: C} = ascii;

这相当于:

代码语言:javascript
复制
var ascii = {
    a: 97,
    b: 98,
    c: 99
};

var A = ascii.a;
var B = ascii.b;
var C = ascii.c;

非那样做不行。

票数 86
EN

Stack Overflow用户

发布于 2019-01-07 20:47:45

这是JavaScript中的析构任务,是ES2015标准的一部分。它将数组中的值或对象中的属性解包或提取到不同的变量中。

数组解构

而不进行解构

代码语言:javascript
复制
var foo = ["one", "two", "three"];
var one = foo[0];
var two = foo[1];
var three = foo[2];

console.log(one, two, three);

使用解构

代码语言:javascript
复制
var foo = ["one", "two", "three"];
var [one, two, three] = foo;

console.log(one, two, three);

对象解构

而不进行解构

代码语言:javascript
复制
var o = {p: 42, q: true};
var p = o.p;
var q = o.q;

console.log(p); //42
console.log(q); //true 

使用解构

代码语言:javascript
复制
var o = { p: 42, q: true };
var { p, q } = o;

console.log(p); //42
console.log(q); //true

分配新的变量名

代码语言:javascript
复制
var o = { p: 42, q: true };
var { p: foo, q: bar } = o;

console.log(foo); //42
console.log(bar); //true

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15290981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档