Страницы

Поиск по вопросам

суббота, 8 июня 2019 г.

Почему наличие унарного плюса в нижеприведенном коде делает ее ошибочной?

(+(("lastIndexOf") in []) ** 55 + 2) + 5


Ответ

Во многих языках, таких как PHP и Python и других, есть оператор возведения в степень (обычно ^ или **), оператор определён имеющим приоритет выше, чем у унарных операторов, таких как унарный + и унарный -, но есть несколько исключений. Например, в Bash оператор ** создан имеющим приоритет ниже, чем у унарных операторов. В JavaScript невозможно написать двухсмысленное выражение, т.е. вы не можете ставить унарный оператор (+/-/~/!/delete/void/typeof) непосредственно перед базовым числом.
Взято ОТСЮДА
Другими словами: это ограничение js'а - нельзя использовать унарный оператор перед базовым числом (числом которое возводится в степень) из-за "двусмысленности".
Варианты исправления.
Явно указываем порядок действий: ((+(("lastIndexOf") in [])) ** 55 + 2) + 5
Используем старый метод: (Math.pow(+("lastIndexOf" in []), 55) + 2) + 5

Комментариев нет:

Отправить комментарий