我对Javascript中的以下括号格式感到有点困惑:
(listeners = {})[obj._listenerId] = obj;
对象被括号括起来是什么意思?
以下
相同 ({
value: "\\abc"
})
另一个问题是 - 仅包含此代码的文件的含义是什么? 谢谢! 玛丽
答案 0 :(得分:4)
在第一种情况下,括号简单而经典地用于更改执行顺序,因为使用括号表示法访问属性的优先级高于赋值。它首先进行分配。
因此,您的行等同于
listeners = {};
listeners[obj._listenerId] = obj;
在第二种情况下,没有更多代码很难说,但这些括号可能用于避免解析器认为它是一个代码块。该表达式返回一个文字对象。
答案 1 :(得分:3)
括号是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。
答案 2 :(得分:0)
使用括号,以便首先评估其中的部分。 例如(listeners = {})将返回新的侦听器空对象。
答案 3 :(得分:0)
这是一个简短的符号:
listeners = {};
listeners[obj._listenerId] = obj;
你可以试试这个:
(sameObj={})['key']='value';
console.log(sameObj)