Javascript括号格式

时间:2013-06-18 08:15:03

标签: javascript object syntax parentheses

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

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

对象被括号括起来是什么意思?

以下

相同
 ({
  value: "\\abc"
 })

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

4 个答案:

答案 0 :(得分:4)

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

因此,您的行等同于

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

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

答案 1 :(得分:3)

括号是grouping operator。通过它们,您可以更改表达式的评估顺序。

(listeners = {})[obj._listenerId] = obj;的作用是:

  1. 将空对象分配给listeners
  2. 将值obj分配给该对象的属性obj._listenerId
  3. 如果没有括号,表达式将被评估为(这里我使用括号来强调评估顺序):

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

    1. obj分配给空对象的属性obj._listenerId
    2. obj分配给listeners(分配表达式的结果是指定的值)。

    3. 我打赌你已经从数学表达式中了解了分组运算符。 1 + 2 * 3会产生7。但(1 + 2) * 39*的优先级高于+,您可以通过分组更改它。

      MDN按其优先顺序提供table of operators

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这是一个简短的符号:

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

你可以试试这个:

(sameObj={})['key']='value';
console.log(sameObj)