如果我在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表示从右到左进行评估。所以这个优先表也不正确。
有人能给我一张正确的桌子吗?
答案 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似乎过分简化了后缀运算符的优先级。
有人能给我一张正确的桌子吗?
答案 1 :(得分:0)
这是MDN的完整运算符优先级表,可在your link中找到: