我对 Javascript 中的以下括号格式有点困惑:
(listeners = {})[obj._listenerId] = obj;
当一个对象被括号包围时是什么意思?
以下相同
({
value: "\\abc"
})
另一个问题是 - 仅包含此代码的文件的含义是什么?谢谢!玛丽
我对 Javascript 中的以下括号格式有点困惑:
(listeners = {})[obj._listenerId] = obj;
当一个对象被括号包围时是什么意思?
以下相同
({
value: "\\abc"
})
另一个问题是 - 仅包含此代码的文件的含义是什么?谢谢!玛丽
在第一种情况下,括号简单而经典地用于更改执行顺序,因为使用括号表示法访问属性比赋值具有更高的优先级。它使分配首先发生。
因此你的线相当于
listeners = {};
listeners[obj._listenerId] = obj;
在第二种情况下,如果没有更多代码很难判断,但这些括号可能用于避免解析器认为它是一个代码块。此表达式返回一个文字对象。
括号是分组运算符。使用它们,您可以更改表达式的评估顺序。
什么(listeners = {})[obj._listenerId] = obj;
是:
listeners
。obj
给该对象的属性obj._listenerId
。如果没有括号,表达式将被评估为(这里我使用括号只是为了强调评估顺序):
listeners = ({}[obj._listenerId] = obj);
IE
obj
给obj._listenerId
空对象的属性。obj
给listeners
(赋值表达式的结果是赋值)。我敢打赌,您已经从数学表达式中了解了分组运算符。1 + 2 * 3
将导致7
. 但是(1 + 2) * 3
是9
。*
具有更高的优先级+
,您可以通过分组更改它。
MDN 提供了一个按优先级排列的运算符表。
使用括号,以便首先评估其中的部分。例如 (listeners = {}) 将返回新的 listeners 空对象。
这是一个简短的符号:
listeners = {};
listeners[obj._listenerId] = obj;
你可以试试这个:
(sameObj={})['key']='value';
console.log(sameObj)