11

在查看 Mozilla (Firefox) 附加 SDK 的一些 Javascript 代码时,我看到了一种我以前从未见过的变量声明:

var { foo, bar } = someFunction("whatever");  // just an example

看到变量名周围的花括号了吗?事实证明,这是一种将对象的属性值一次性分配给多个变量的方法。它似乎类似于解构赋值或 PHP 的list,除了使用对象属性而不是数组。

我实际上是通过一些摆弄发现了这一点,因为似乎没有关于它的文档。看看这段代码:

function gimmeAnObject() {
    return {
        foo: "hey",
        bar: "sup"
    };
}

console.log(gimmeAnObject()); // Object { foo="hey", bar="sup" }

var { foo, bar } = gimmeAnObject();

console.log(foo); // hey
console.log(bar); // sup

我还发现这只适用于 Firefox。Chrome 会改为抛出错误:“ Uncaught SyntaxError: Unexpected token { ”。这就解释了为什么我在开始查看 Firefox 附加代码之前没有看到它。

有没有其他人见过这种变量声明?为什么我找不到任何关于它的文档?由于它只适用于 Firefox,我认为它可能是 Mozilla 的东西,但我什至在 MDN 上找不到任何关于它的信息。再说一次,也许我只是不知道要搜索什么。

4

2 回答 2

5

查看“解构赋值”链接(即http://en.wikipedia.org/wiki/JavaScript_syntax#Assignmenthttp://dailyjs.com/2011/09/12/destructuring/)看起来这个构造解构赋值.

维基百科:

在 Mozilla 的 JavaScript 中,从 1.7 版开始,解构赋值允许一次将部分数据结构赋值给多个变量。赋值的左侧是一个模式,类似于任意嵌套的对象/数组字面量,在其叶子处包含左左值,这些左值将接收分配值的子结构。

在 JavaScript 中,数组和对象或多或少是相同的,因此对象也支持数组支持的构造也就不足为奇了。

于 2012-05-10T01:03:34.733 回答
0

你不能这样做。您必须命名一个 var 并执行以下操作:

var myObj = (function(){
    return {
        foo: 'foo',
        bar: 'bar'
    };
})();
于 2012-05-10T00:38:55.663 回答