如果我在 Firefox 上运行以下代码,则会收到错误消息:
new Number.toString;
But 根据MDN, new Number
应该先评估。所以我认为该表不正确。
让我们来看看at MSDN。表格上方写着运算符是从左到右计算的。但:
a = 1;
b = a = 2;
Now b
值为 2,建议从右到左进行评估。所以这个优先级表也是不正确的。
正确的表是什么?
根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence$revision/510297#Table new Number
应该先评估。所以我认为该表不正确。
The new
运算符复杂。让我们检查一下官方语言语法: 它有两种表现形式:
MemberExpression := new MemberExpression Arguments | …
NewExpression := new NewExpression | …
后者在不带参数的情况下调用,确实比属性访问器具有较低的优先级 - 因此您的表达式的计算结果为new (Number.toString)
。然而,当new
使用参数(括号)调用,那么它确实比 a 具有更高的优先级CallExpression
并且等于属性访问器,在这种情况下,它们将从左到右进行评估。事实上,MDN 表格应该让这一点更加清楚。
我们看一下MSDN:http://msdn.microsoft.com/en-us/library/z3ks45k7(v=vs.94).aspx。表格上方写着运算符是从左到右计算的。
这绝对是错误的。运算符关联性并不总是从左到右,最明显的是赋值运算符,如您的示例所示。 MDN 表指出这一点是正确的。另外,MSDN 似乎过于简化了后缀运算符的优先级。
谁能给我一个正确的表?
Try 我对 MDN 表格的新修订.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)