Ответ 1
согласно https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence$revision/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.