常量声明与块

8

最近我在研究火狐浏览器Add-on Builder SDK源代码时,偶然发现了以下常量声明:

const { getCodeForKey, toJSON } = require("../../keyboard/utils");

我可以找到关于CommonJS模块的信息,但是这个任务的左侧部分让我有点困惑,因为它必须是语言特定的,而我在谷歌上找不到任何相关信息。
请问是否有人能够指向一些规范/草案来解释这里正在发生什么?

1
自从Javascript 1.7(在基于Gecko的浏览器中)以来,函数可以返回多个值,并且左侧基本上收集了2个不同的值。或者这就是我根据在此处找到的文档所认为的https://developer.mozilla.org/en/New_in_JavaScript_1.7。在该页面上,他们展示了[a,b] = fn()等示例,但我怀疑它与FF扩展中的类似。从标题“解构赋值(合并到自己的页面/部分)”开始阅读。 - GillesC
请参见规范的JavaScript对象左侧括号表示法赋值 - Bergi
1个回答

13

这是一个解构赋值,目前仅由火狐浏览器所使用的SpiderMonkey JavaScript引擎实现。以下是对数组的使用方法:

// Destructuring assignment
[a, b] = foo;

// Equivalent code
a = foo[0];
b = foo[1];

这是关于对象如何运作的说明:

// Destructuring assignment
{a, b} = foo;

// Equivalent code
a = foo.a;
b = foo.b;

稍微更为详细的示例:

// Destructuring assignment
{name: a, address: {line1: b}} = foo;

// Equivalent code
a = foo.name;
b = foo.address.line1;

因此,您的代码示例等同于:

var utilsExports = require("../../keyboard/utils");
const getCodeForKey = utilsExports.getCodeForKey;
const toJSON = utilsExports.toJSON;

这只是一种更方便的写法。


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