最近我在研究火狐浏览器Add-on Builder SDK源代码时,偶然发现了以下常量声明:
const { getCodeForKey, toJSON } = require("../../keyboard/utils");
我可以找到关于CommonJS模块的信息,但是这个任务的左侧部分让我有点困惑,因为它必须是语言特定的,而我在谷歌上找不到任何相关信息。
请问是否有人能够指向一些规范/草案来解释这里正在发生什么?
最近我在研究火狐浏览器Add-on Builder SDK源代码时,偶然发现了以下常量声明:
const { getCodeForKey, toJSON } = require("../../keyboard/utils");
这是一个解构赋值,目前仅由火狐浏览器所使用的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;
这只是一种更方便的写法。