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

gra*_*ant 11 javascript syntax firefox mozilla variable-assignment

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

var { foo, bar } = someFunction("whatever");  // just an example
Run Code Online (Sandbox Code Playgroud)

查看变量名称周围的花括号?事实证明,这是一种将对象的属性值一次性分配给多个变量的方法.它看起来类似于解构赋值或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
Run Code Online (Sandbox Code Playgroud)

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

有没有其他人见过这种变量声明?为什么我找不到任何文件?因为它只适用于Firefox,我认为它可能是一个Mozilla的东西,但我甚至在MDN上找不到任何关于它的东西.然后,也许我只是不知道要搜索什么.

Ale*_*kov 5

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

维基百科:

在Mozilla的JavaScript中,从版本1.7开始,解构赋值允许一次将数据结构的各个部分分配给多个变量.分配的左手侧是类似于一个任意嵌套对象/阵列字面含1-左值在其叶子将要接收所分配的值的子结构的图案.

在JavaScript中,数组和对象或多或少相同,因此对象也支持数组支持的构造并不奇怪.