我有點困惑關於以下括號格式在Javascript:的Javascript括號格式
(listeners = {})[obj._listenerId] = obj;
當一個對象被包圍括號這是什麼意思?
同一以下
({
value: "\\abc"
})
另一個問題是 - 什麼是隻包含此代碼的文件的含義是什麼? 謝謝! Mary
我有點困惑關於以下括號格式在Javascript:的Javascript括號格式
(listeners = {})[obj._listenerId] = obj;
當一個對象被包圍括號這是什麼意思?
同一以下
({
value: "\\abc"
})
另一個問題是 - 什麼是隻包含此代碼的文件的含義是什麼? 謝謝! Mary
括號是grouping operator。有了它們,您可以更改表達式的評估順序。
(listeners = {})[obj._listenerId] = obj;
做的是:
listeners
。obj
分配給該對象的屬性obj._listenerId
。如果沒有括號,表達式將作爲評估(這裏我用括號只是爲了強調計算順序):
listeners = ({}[obj._listenerId] = obj);
即
obj
的財產obj._listenerId
一個空的物體。obj
到listeners
(賦值表達式的結果是所分配的值)。我敢打賭,你已經知道從數學表達式的分組操作。 1 + 2 * 3
將導致7
。但是(1 + 2) * 3
是9
。 *
比+
更高的優先級,你可以改變,隨着分組。
MDN在他們的優先順序提供了table of operators。
在第一種情況下,括號是簡單而經典地用於更改執行順序,因爲使用括號表示訪問屬性的優先級高於賦值。它使分配首先發生。
因此您的線路相當於
listeners = {};
listeners[obj._listenerId] = obj;
在第二種情況下,很難說沒有更多的代碼,但這些括號可能習慣以避免解析器認爲這是一個代碼塊。該表達式返回一個文字對象。
謝謝!這回答了第一部分。你有一個鏈接,在JavaScript中指定此語法? – mary
如果你想要一個關於使用圓括號來分隔表達式(從而改變執行順序)的鏈接,Felix提供的可能是好的。 –
使用括號,以便首先評估它們內部的部分。例如(listeners = {})將返回新偵聽器的空對象。
這是一個簡短的註釋:
listeners = {};
listeners[obj._listenerId] = obj;
你可以試試這個:
(sameObj={})['key']='value';
console.log(sameObj)
*「?什麼是隻包含此代碼的文件所指的」 *它不具有一個特定的含義。它看起來有點像一個打破的函數調用,例如沒有函數名稱的JSONP。 –
第二個示例是一個附加到mustache.js框架的文件,名爲backslashes.js - 這裏還有其他類似的示例,它們所做的全部都是用圓括號包裝對象聲明。 – mary
然後它可能只是用來評估文件爲JavaScript。沒有括號,'{...}'會被評估爲* block *,而不是對象字面值,並且會引發語法錯誤。它又是分組操作符,但用於確保將「內容」評估爲表達式。它不是用來改變評估順序的。 –