使用关联数组作为变量名?- JavaScript

5

我正在查看一个Firefox扩展程序的代码(这里:https://github.com/mozilla/prospector/blob/master/oneLiner/bootstrap.js#L34),我看到了一些javascript中从未见过的东西。程序员使用了一个关联数组作为变量名。有人能向我解释一下这个变量引用是如何工作的吗?

const {classes: Cc, interfaces: Ci, utils: Cu} = Components;

我已经从阅读这个页面了解了"const": https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/const,但是它如何将关联数组对象用作变量名呢?
此外,它似乎在使用关联数组中的键名作为对组件方法的引用(在此处列出:https://developer.mozilla.org/zh-CN/docs/Mozilla/Tech/XPCOM/Language_Bindings/Components_object_reference)。我一直认为键名必须放在值之前,但这似乎是先将引用 Components 类的方法的值放在第一位,然后将其分配给名为 Cc 的变量,即使 Cc 在应该放值的位置上(Ci 用于 Components 接口方法和 Cu 用于 Components 工具方法)。

2
在JavaScript中,您所谓的“关联数组”的通常术语只是“对象”(有时是“映射”或“字典”)。我们避免使用“关联数组”这个术语,因为对于那些认为它与Array类型相关的不太了解的人来说,这会造成困惑。 - T.J. Crowder
2
可能是带块的常量声明的重复问题。 - Wladimir Palant
2个回答

6
你看到的是解构赋值,它自 JavaScript 1.7 起可用。更多信息请参阅此文档
解构赋值使得从数组或对象中提取数据成为可能,使用的语法与创建数组和对象字面量的语法相似。对象和数组字面表达式提供了一种创建临时数据包的简单方法。一旦你创建了这些数据包,你可以按照任何想要的方式使用它们,甚至可以从函数中返回它们。

大加1。显然,ECMAScript6将具有某种解构赋值,尽管它可能不完全兼容Mozilla的解构赋值。 - T.J. Crowder
感谢提供链接。在发布之前,我已经搜索了谷歌,但没有找到任何相关的内容。这个例子似乎解释的很清楚:https://developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.7#Looping_across_values_in_an_array_of_objects尽管如此,交换键值还是有点奇怪。 - Yansky

0

嘿,看这个:

var abc = {classes: "ABC", interfaces: "DEF", utils: "XYZ"};
const {classes: Cc, interfaces: Ci, utils: Cu} = abc;
console.debug("test: ", Cc, Ci, Cu);

看起来很有趣,尤其是对于阅读代码的人来说 :)


最糟糕的是它只兼容Firefox浏览器。因此,基本上你强迫读者学习(并保持分离)一种不同的语言。 - Denys Séguret
好的,我尝试了这个链接,它告诉我我的Chrome也支持1.7,Firefox支持1.8,但是这个语句在Chrome中不起作用...此外,IE9仅支持1.3 :D - Igor Deruga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接