什么是正确的Javascript运算符优先级表?

时间:2014-01-16 10:17:38

标签: javascript operators operator-precedence

如果我在Firefox上运行以下代码,则会收到错误:

new Number.toString;

但根据MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence new Number应首先评估。所以我认为表格不正确。

让我们看一下MSDN:http://msdn.microsoft.com/en-us/library/z3ks45k7(v=vs.94).aspx。在表格上方写道,操作员从左到右进行评估。但是:

a=1;
b=a=2;

现在b的值为2表示从右到左进行评估。所以这个优先表也不正确。

有人能给我一张正确的桌子吗?

2 个答案:

答案 0 :(得分:5)

  

根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence$revision/510297#Table new Number应首先评估。所以我认为表格不正确。

new运营商很复杂。让我们检查official language grammar:它确实发生在两个表现形式中:

MemberExpression := new MemberExpression Arguments | …
NewExpression := new NewExpression | …

后者,在没有参数的情况下调用,确实具有比属性访问器更少的优先级 - 因此您的表达式的计算结果为new (Number.toString)。但是,当使用参数(括号)调用new时,它确实具有比CallExpression更高的优先级并且等于属性访问器,在这种情况下,它们从左到右进行评估。实际上,MDN表应该更清楚。

  

让我们看一下MSDN:http://msdn.microsoft.com/en-us/library/z3ks45k7(v=vs.94).aspx。在表格上方写道,操作员从左到右进行评估。

这绝对是错误的。运算符关联性并不总是从左到右,在赋值运算符中最明显,如示例所示。 MDN表说明了这一点。此外,MSDN似乎过分简化了后缀运算符的优先级。

  

有人能给我一张正确的桌子吗?

尝试my new revision of MDN's table

答案 1 :(得分:0)

这是MDN的完整运算符优先级表,可在your link中找到:

enter image description here