1

我对 Javascript 中的以下括号格式有点困惑:

(listeners = {})[obj._listenerId] = obj;

当一个对象被括号包围时是什么意思?

以下相同

 ({
  value: "\\abc"
 })

另一个问题是 - 仅包含此代码的文件的含义是什么?谢谢!玛丽

4

4 回答 4

4

在第一种情况下,括号简单而经典地用于更改执行顺序,因为使用括号表示法访问属性比赋值具有更高的优先级。它使分配首先发生。

因此你的线相当于

listeners = {};
listeners[obj._listenerId] = obj;

在第二种情况下,如果没有更多代码很难判断,但这些括号可能用于避免解析器认为它是一个代码块。此表达式返回一个文字对象。

于 2013-06-18T08:16:45.293 回答
3

括号是分组运算符。使用它们,您可以更改表达式的评估顺序。

什么(listeners = {})[obj._listenerId] = obj;是:

  1. 将一个空对象分配给listeners
  2. 将值分配obj给该对象的属性obj._listenerId

如果没有括号,表达式将被评估为(这里我使用括号只是为了强调评估顺序):

listeners = ({}[obj._listenerId] = obj);

IE

  1. 分配objobj._listenerId空对象的属性。
  2. 赋值objlisteners(赋值表达式的结果是赋值)。

我敢打赌,您已经从数学表达式中了解了分组运算符。1 + 2 * 3将导致7. 但是(1 + 2) * 39*具有更高的优先级+,您可以通过分组更改它。

MDN 提供了一个按优先级排列的运算符表。

于 2013-06-18T08:19:15.817 回答
0

使用括号,以便首先评估其中的部分。例如 (listeners = {}) 将返回新的 listeners 空对象。

于 2013-06-18T08:17:45.037 回答
0

这是一个简短的符号:

listeners = {};
listeners[obj._listenerId] = obj;

你可以试试这个:

(sameObj={})['key']='value';
console.log(sameObj)
于 2013-06-18T08:23:08.740 回答