【问题标题】:Javascript - Assigning multiple variables to object properties using curly braces in variable declarationJavascript - 在变量声明中使用花括号将多个变量分配给对象属性
【发布时间】:2012-05-10 00:36:38
【问题描述】:

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

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

看到变量名周围的花括号了吗?事实证明,这是一种将对象的属性值一次性分配给多个变量的方法。它似乎类似于 destructuring assignment 或 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 上找不到任何关于它的信息。再说一次,也许我只是不知道要搜索什么。

【问题讨论】:

标签: javascript firefox syntax variable-assignment mozilla


【解决方案1】:

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

维基百科:

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

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

【讨论】:

  • 呵呵,看来你是对的。不过,我想知道为什么关于它的文档如此之少。我猜除了 Mozilla 没人看到解构赋值的用处。
【解决方案2】:

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

var myObj = (function(){
    return {
        foo: 'foo',
        bar: 'bar'
    };
})();

【讨论】:

  • 你会这么认为,是的,但在 Firefox 中似乎是可以的。尝试在打开控制台的情况下运行我在 Firefox 中发布的 jsFiddle 链接。
  • 也许 Firefox 更宽松一点,或者它只是有一个允许它的实现。但我猜这个声明不在网络标准中
  • 它正在被添加到网络标准中。等几年。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
  • 2016-12-24
  • 1970-01-01
  • 2016-05-16
  • 1970-01-01
相关资源
最近更新 更多