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

Mar*_*Wit 4 javascript operators operator-precedence

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

new Number.toString;
Run Code Online (Sandbox Code Playgroud)

但根据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;
Run Code Online (Sandbox Code Playgroud)

现在b具有值2,表示从右到左的评估.所以这个优先表也不正确.

谁能给我一张正确的桌子?

Ber*_*rgi 6

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

new操作是复杂的.让我们检查官方语言语法:它确实出现在两种表现形式中:

MemberExpression := new MemberExpression Arguments | …
NewExpression := new NewExpression | …
Run Code Online (Sandbox Code Playgroud)

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

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

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

谁能给我一张正确的桌子?

试试我的新MDN表格.