编辑 在查看JSHint后,我发现这个“解构表达式”在ES6(使用esnext选项)或Mozilla JS扩展(使用moz)中可用,但在阅读后,我仍然不明白为什么要使用它
我在MDN上遇到了下面的代码
var ui = require("sdk/ui");
var { ActionButton } = require("sdk/ui/button/action");
第二行上的大括号有什么用,为什么要用它们?为什么第一行没有大括号?
编辑 在查看JSHint后,我发现这个“解构表达式”在ES6(使用esnext选项)或Mozilla JS扩展(使用moz)中可用,但在阅读后,我仍然不明白为什么要使用它
我在MDN上遇到了下面的代码
var ui = require("sdk/ui");
var { ActionButton } = require("sdk/ui/button/action");
第二行上的大括号有什么用,为什么要用它们?为什么第一行没有大括号?
当前回答
这就是所谓的解构赋值,它是JavaScript 1.7(和ECMAScript 6)的新特性(目前仅作为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];
浏览器支持可以使用kangax的ES6兼容性表来跟踪。
其他回答
这就是所谓的解构赋值,它是JavaScript 1.7(和ECMAScript 6)的新特性(目前仅作为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];
浏览器支持可以使用kangax的ES6兼容性表来跟踪。