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,表示从右到左的评估.所以这个优先表也不正确.
谁能给我一张正确的桌子?
根据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表格.