Какова правильная таблица приоритетов оператора 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, доступная по вашей ссылке:

Другие вопросы по тегам