4

最近,我一直在尋找到Firefox Add-on Builder SDK源,無意中發現了這樣的常量聲明:與塊常量聲明

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

我能找到的有關CommonJS Modules,但這項任務的左側部分稍微讓我困惑,因爲它必須是語言特定的,並且我不能在Google上做任何事情。

有人能指點我的一些規範/草案來解釋這裏發生了什麼嗎?

+1

由於JavaScript 1.7(在基於壁虎的瀏覽器中)函數van返回多個值,左邊的部分基本上收集2個不同的值。或者,我認爲這是基於https://developer.mozilla.org/en/New_in_JavaScript_1.7的文檔。在那個頁面上,他們顯示的例子是[a,b] = fn();但我懷疑它與FF擴展中的相似。閱讀標題「解構賦值(合併到自己的頁面/部分)」 – GillesC 2012-04-17 21:30:57

+0

另請參閱規範[JavaScript對象括號符號在左側分配](http://stackoverflow.com/q/26999820/1048572) – Bergi 2016-02-15 18:30:39

回答

5

這是一個destructuring assignment,目前只能通過Firefox使用的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; 

這只是一個更方便的寫法。

+0

現在我知道它*的名稱:) – 2012-04-18 12:31:43