JavaScript运算符优先级逻辑让我感到困惑。

4
我能找到的运算符优先级表如下: https://developer.mozilla.org/en/JavaScript/Reference/Operators/Operator_Precedence 根据这个表格,'>>'和'*'都是从左到右结合的,而'>>'的优先级更高,因此我认为a >> b * c应该解释为(a >> b) * c。然而,在Firefox中进行测试(使用Firebug),告诉我:
0x11 >> 1      ....    8
0x11 >> 1 * 2  ....    4

这让我很困惑,它应该是16吗?

好的,我知道在优先级不清楚的情况下我们应该使用括号,但是是否有一个规则或解释来说明正在发生什么?

4个回答

2
根据您提供的表格,* 的优先级(5)高于>> (7);在该表格中,优先级较高的项目排列在首位,但是令人困惑的是,使用更低的数字来表示更高的优先级。

2
如果我看这张表,*运算符的优先级比>>高,因此*绑定更早。它的解释是:
  • 0x11 >> 1 * 2
  • 0x11 >> (1 * 2)
  • 0x11 >> (2)
  • 0x11 >> 2

由于我的误解,让我困惑了一个小时。我很蠢,非常感谢大家的回复,答案给最快的回答者,如果这不是很公平,对不起... - ccppjava
哇,你不傻啊,最高的优先级是最低的值。这根本没有任何意义。有些人只是想看世界燃烧... - MaiaVictor
@Dokkat 这个映射很有意义,当最高优先级数字不是1时会感到困惑。在比赛中,当你排名最高(1)时,你就获胜了。 - Lekensteyn

1
根据您提供的表格,乘法比位移运算符的优先级更高(5>7)。
从表格顶部开始:

以下表格按优先级从高(1)到低(17)排序。


1
不,它说*>>有更高的优先级。 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接