什么是正确的Javascript运算符优先级表?
如果在Firefox上运行以下代码,则会出现错误:什么是正确的Javascript运算符优先级表?,javascript,operators,operator-precedence,Javascript,Operators,Operator Precedence,如果在Firefox上运行以下代码,则会出现错误: new Number.toString; 但是根据MDN的规定,新的数字应该首先评估。我想这张桌子不对 让我们看看MSDN:。上面的表格是从左到右计算运算符的。但是: a=1; b=a=2; 现在b的值为2,表示从右到左进行评估。所以这个优先表也是不正确的 谁能给我一张正确的桌子吗 根据新编号应首先评估。我想这张桌子不对 新的操作符很复杂。让我们检查一下:它确实有两种表现形式: MemberExpression := new MemberE
new Number.toString;
但是根据MDN的规定,新的数字应该首先评估。我想这张桌子不对
让我们看看MSDN:。上面的表格是从左到右计算运算符的。但是:
a=1;
b=a=2;
现在b
的值为2,表示从右到左进行评估。所以这个优先表也是不正确的
谁能给我一张正确的桌子吗
根据新编号
应首先评估。我想这张桌子不对
新的
操作符很复杂。让我们检查一下:它确实有两种表现形式:
MemberExpression := new MemberExpression Arguments | …
NewExpression := new NewExpression | …
后者(在没有参数的情况下调用)的优先级确实低于属性访问器,因此表达式的计算结果为new(Number.toString)
。但是,当使用参数(括号)调用new
时,它的优先级确实高于CallExpression
,并且等于属性访问器,在这种情况下,它们将从左到右求值。事实上,MDN表应该更清楚地说明这一点
让我们看看MSDN:。上面的表格是从左到右计算运算符的
这绝对是错误的。运算符关联性并不总是从左到右,在赋值运算符处最为明显,如您的示例中所示。MDN表说明这一点是正确的。此外,MSDN似乎过分简化了后缀运算符的优先级
谁能给我一张正确的桌子吗
试试看。这是MDN的完整运算符优先级表,可从以下网址获得:
关联性很重要。关于为什么new Number.toString()
不正确(不仅仅是Gecko),我正在寻找一个优先表来解释这一点。MDN表在中是正确的,但后来变得不正确。我现在已经修好了,请检查您是否能理解新表(以及我是否仍然忽略了某些内容)新函数
?我认为现在需要关联性。是的,它是从右到左关联的:new(new(Function))
。我忘了吗?我是说新函数()()
。我每天都使用它@金牛座我再说一遍:运算符优先级(无论a+b*c
是指(a+b)*c
还是a+(b*c)
)与操作数求值顺序无关(在JavaScript中总是从左到右:a
然后b
然后c
)。