javascript变量名周围的{大括号}是什么意思

javascript变量名周围的{大括号}是什么意思,javascript,firefox,firefox-addon,Javascript,Firefox,Firefox Addon,编辑 在查看JSHint之后,我发现这个“解构表达式”在ES6(使用esnext选项)或Mozilla JS扩展(使用moz)中可用,但是在阅读它之后,我仍然不明白为什么要使用它 我在上遇到了以下代码 第二行的大括号是做什么的,为什么要用?为什么第一行没有大括号?这就是所谓的a,它是(和)的一个新功能(目前仅作为Firefox JavaScript引擎的一部分提供)。大致上,它可以转化为: var ActionButton = require("sdk/ui/button/action").Ac

编辑 在查看JSHint之后,我发现这个“解构表达式”在ES6(使用esnext选项)或Mozilla JS扩展(使用moz)中可用,但是在阅读它之后,我仍然不明白为什么要使用它

我在上遇到了以下代码

第二行的大括号是做什么的,为什么要用?为什么第一行没有大括号?

这就是所谓的a,它是(和)的一个新功能(目前仅作为Firefox JavaScript引擎的一部分提供)。大致上,它可以转化为:

var ActionButton = require("sdk/ui/button/action").ActionButton;
在本例中,这似乎很愚蠢,因为只分配了一项。但是,您可以使用此模式一次分配多个变量:

{x, y} = foo;
相当于:

x = foo.x;
y = foo.y;
这也可用于阵列。例如,您可以轻松地交换两个值,而无需使用临时变量:

var a = 1;
var b = 3;

[a, b] = [b, a];

可以使用跟踪浏览器支持。

这就是所谓的a,它是(和)的一项新功能(目前仅作为Firefox JavaScript引擎的一部分提供)。大致上,它可以转化为:

var ActionButton = require("sdk/ui/button/action").ActionButton;
在本例中,这似乎很愚蠢,因为只分配了一项。但是,您可以使用此模式一次分配多个变量:

{x, y} = foo;
相当于:

x = foo.x;
y = foo.y;
这也可用于阵列。例如,您可以轻松地交换两个值,而无需使用临时变量:

var a = 1;
var b = 3;

[a, b] = [b, a];



可以使用来跟踪浏览器支持。

我认为这是一种EcmaScript 6解构绑定模式。@Pointy在查看JSHint后,我发现这个“解构表达式”在ES6(使用esnext选项)或Mozilla JS扩展(使用moz)中可用然而,在阅读之后,我仍然不明白为什么它会被使用@Bergi肯定会将其作为一个ES6之前的问题的重复来结束,这个问题的答案声称这是Firefox独有的JS1.7功能,这是没有帮助的?自从提出这个问题以来,世界已经发生了变化,那里的答案已经过时——而且这个问题正在吸引更多的观点。我们应该改进此问答对,以清楚地包含此语法的历史记录,这样就不会有人对JS 1.7和ES 6之间的关系感到困惑,然后将另一个问题作为此问题的副本关闭。@MarkAmery:这两个问题都询问JS 1.7的功能,甚至都有标记。对于ES6问题,我使用的是规范问题。@Bergi-Hmm。考虑到他发现这段代码的上下文,OP阅读的代码使用JS 1.7功能显然是对的,但我认为本例中的OP遇到了这种语法,不知道他看到的是哪种版本的语法。如果有一个全面的复制目标来解释引入语法的两个规范(以及这两个规范之间的任何差异,尽管我认为它们是相同的,ES规范只是完全复制了JavaScript 1.7版本),这不是更有用吗?我认为这是EcmaScript 6的解构绑定模式。@Pointy在查看JSHint后,我发现这个“解构表达式”在ES6(使用esnext选项)或Mozilla JS扩展(使用moz)中可用然而,在阅读之后,我仍然不明白为什么它会被使用@Bergi肯定会将其作为一个ES6之前的问题的重复来结束,这个问题的答案声称这是Firefox独有的JS1.7功能,这是没有帮助的?自从提出这个问题以来,世界已经发生了变化,那里的答案已经过时——而且这个问题正在吸引更多的观点。我们应该改进此问答对,以清楚地包含此语法的历史记录,这样就不会有人对JS 1.7和ES 6之间的关系感到困惑,然后将另一个问题作为此问题的副本关闭。@MarkAmery:这两个问题都询问JS 1.7的功能,甚至都有标记。对于ES6问题,我使用的是规范问题。@Bergi-Hmm。考虑到他发现这段代码的上下文,OP阅读的代码使用JS 1.7功能显然是对的,但我认为本例中的OP遇到了这种语法,不知道他看到的是哪种版本的语法。如果有一个全面的重复目标来解释引入语法的两个规范(以及这两个规范之间的任何差异,尽管我认为它们是相同的,ES规范只是复制了JavaScript 1.7版本),这不是更有用吗?一个更有用的例子是类似
{width,height,color}=options
,它将替换行
width=options.width;height=options.height;color=options.color
@CaseyFalk-据我所知,
var{x,y}=…
相当于
var x=…
var y=…
{x,y}=..
相当于
x=..
y=..
@CaseyFalk-换句话说,你是对的。因为上面的示例声明了
{ActionButton}
,所以我的粗略翻译是不正确的。我已经更新了它。我意识到它是“粗略的”--抱歉吹毛求疵。:)请投赞成票。“JavaScript1.7支持是在Firefox2(2006年10月)中引入的”:D无论如何,它是ECMA-6草案(,)的一部分,因此在可预见的未来它将成为。另外:
(函数(arg1,{opt1,opt2}){console.log(arg1,opt1,opt2);})(1,{opt1:2,opt2:3})
。另外:
var{ActionButton:ab}=.;
一个更有用的例子是类似于
{width,height,color}=options
,它将替换行
width=options.width;height=options.height;color=options.color
@CaseyFalk-从我所知,
var{x,y}=..
将等同于
var x=..
var y=..
{x,y}=..
将等同于
x=..
y=..
@CaseyFalk-换句话说,你是个骗子