Javascript-在变量声明中使用大括号将多个变量分配给对象属性

Javascript-在变量声明中使用大括号将多个变量分配给对象属性,javascript,firefox,syntax,variable-assignment,mozilla,Javascript,Firefox,Syntax,Variable Assignment,Mozilla,在查看Mozilla(Firefox)插件SDK的一些Javascript代码时,我看到了以前从未见过的变量声明: var { foo, bar } = someFunction("whatever"); // just an example 看到变量名周围的大括号了吗?事实证明,这是一种将对象的属性值一次性分配给多个变量的方法。它似乎类似于或PHP,除了对象属性而不是数组 事实上,我是通过一些篡改发现这一点的,因为似乎没有关于它的文档。请看下面的代码: function gimmeAnOb

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

var { foo, bar } = someFunction("whatever");  // just an example
看到变量名周围的大括号了吗?事实证明,这是一种将对象的属性值一次性分配给多个变量的方法。它似乎类似于或PHP,除了对象属性而不是数组

事实上,我是通过一些篡改发现这一点的,因为似乎没有关于它的文档。请看下面的代码:

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会抛出一个错误:“uncaughtsyntaxerror:uncontractedtoken{”。这解释了为什么我在开始查看Firefox插件代码之前没有看到它


以前有人见过这种变量声明吗?为什么我找不到任何关于它的文档?因为它只在Firefox中工作,我想它可能是Mozilla的东西,但我甚至在MDN上找不到任何关于它的东西。再说一次,也许我只是不知道搜索什么。

你不能这样做。你必须命名一个变量并做些什么像这样:

var myObj = (function(){
    return {
        foo: 'foo',
        bar: 'bar'
    };
})();
看看“解构分配”链接(即和),看起来这个结构就是解构分配

维基百科:

在Mozilla的JavaScript中,从1.7版开始,解构赋值允许将部分数据结构同时赋值给多个变量。赋值的左侧是一种模式,类似于任意嵌套的对象/数组文本,在其叶上包含l-左值,用于接收所分配v的子结构价值


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

你会这么认为,是的,但在Firefox中,你可以。试着在打开控制台的情况下运行我在Firefox中发布的JSFIDLE链接。也许Firefox有点宽容,或者它只是一个自己的实现允许它。但我猜这个声明不在web标准中,它正在被添加到web标准中。等几年。;)嗯,看起来你是对的。我想知道为什么关于它的文档这么少。我想除了Mozilla没有人看到分解分配的有用性。可能是重复的发现了这个我自己写了一个几乎相同的问题:)