Какова правильная таблица приоритетов оператора Javascript?
Если я запускаю следующий код в Firefox, я получаю сообщение об ошибке:
new Number.toString;
Но согласно 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;
Сейчас b
имеет значение 2, которое предполагает оценку справа налево. Так что и эта таблица приоритетов не верна.
Кто-нибудь может дать мне правильную таблицу?
3 ответа
в соответствии с http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence%24revision/510297
new Number
следует оценить в первую очередь. Так что таблица не верна, я думаю.
new
Оператор сложный. Давайте проверим грамматику официального языка: это происходит в двух проявлениях:
MemberExpression := new MemberExpression Arguments | …
NewExpression := new NewExpression | …
Последний, где вызывается без аргументов, действительно имеет меньший приоритет, чем методы доступа к свойствам, так что ваше выражение оценивается как new (Number.toString)
, Однако когда new
вызывается с аргументами (в скобках), тогда он имеет больший приоритет, чем CallExpression
и равен средству доступа к свойству, в этом случае они будут оценивать слева направо. Действительно, таблица MDN должна прояснить это.
Давайте посмотрим на MSDN: http://msdn.microsoft.com/en-us/library/z3ks45k7(v=vs.94).aspx. Над таблицей написано, что операторы оцениваются слева направо.
Это определенно неправильно. Ассоциативность операторов не всегда слева направо, что наиболее очевидно в операторах присваивания, как в вашем примере. Таблица MDN утверждает, что это правильно. Кроме того, MSDN, кажется, упрощает приоритет постфиксных операторов.
Кто-нибудь может дать мне правильную таблицу?
Попробуйте мою новую версию таблицы MDN.
Приоритет Javascript более важен, некоторые обучающие веб-сайты не дают надлежащего списка, мы должны быть осторожны с этим.
Вот полная таблица приоритетов операторов MDN, доступная по вашей ссылке: