Recently I was looking into Firefox Add-on Builder SDK sources, and stumbled on such constants declaration:
const { getCodeForKey, toJSON } = require("../../keyboard/utils");
I could find information about CommonJS Modules, but left part of this assignment slightly confuses me, since it must be language specific, and I couldn't google anything on that.
Can someone point me to some specification/draft that explains what's going on here?
The const declaration creates a read-only reference to a value. It does not mean the value it holds is immutable—just that the variable identifier cannot be reassigned. For instance, in the case where the content is an object, this means the object's contents (e.g., its properties) can be altered.
Variables defined with const cannot be Redeclared. Variables defined with const cannot be Reassigned. Variables defined with const have Block Scope.
A constant holds a value that does not change. A constant declaration specifies the name, data type, and value of the constant and allocates storage for it. The declaration can also impose the NOT NULL constraint.
The const keyword Variables can be declared as constants by using the “const” keyword before the datatype of the variable. The constant variables can be initialized once only. The default value of constant variables are zero.
This is a destructuring assignment, something that is currently only implemented by the SpiderMonkey JavaScript engine which is used by Firefox. Here is how it works with arrays:
// Destructuring assignment
[a, b] = foo;
// Equivalent code
a = foo[0];
b = foo[1];
And here is how it works with objects:
// Destructuring assignment
{a, b} = foo;
// Equivalent code
a = foo.a;
b = foo.b;
A slightly more elaborate example:
// Destructuring assignment
{name: a, address: {line1: b}} = foo;
// Equivalent code
a = foo.name;
b = foo.address.line1;
So your code example is equivalent to:
var utilsExports = require("../../keyboard/utils");
const getCodeForKey = utilsExports.getCodeForKey;
const toJSON = utilsExports.toJSON;
It is merely a more convenient way to write it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With