Логика приоритета оператора JavaScript смущает меня - PullRequest
4 голосов
/ 25 августа 2010

Таблица приоритетов операторов, которую я могу найти:

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 голосов
/ 25 августа 2010

Если я посмотрю на эту таблицу, оператор * имеет более высокий приоритет, чем >>, поэтому * связывается раньше.Это интерпретируется как:

  • 0x11 >> 1 * 2
  • 0x11 >> (1 * 2)
  • 0x11 >> (2)
  • 0x11 >> 2
2 голосов
/ 25 августа 2010

Согласно таблице, с которой вы связаны, * имеет более высокий приоритет (5), чем >> (7);более высокий приоритет указан первым в этой таблице, хотя, как ни странно, более низкие числа используются для обозначения более высокого приоритета.

1 голос
/ 25 августа 2010

Нет, это говорит о том, что * имеет более высокий приоритет, чем >>. :)

1 голос
/ 25 августа 2010

Согласно таблице, которую вы связали, умножение имеет более высокий приоритет (5), чем сдвиг битов (7).

В верхней части таблицы:

Следующая таблицаупорядочен с наивысшего (1) до низшего (17) приоритета.

...