Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是正确的Javascript运算符优先级表?_Javascript_Operators_Operator Precedence - Fatal编程技术网

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

什么是正确的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

如果在Firefox上运行以下代码,则会出现错误:

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
)。