Когда я использую оператор экспоненты (**) в JavaScript, он обычно работает должным образом:
2 ** 2 // 4
2 ** -2 // 0.25
Но когда левый операнд отрицательный
-2 ** 2
Я получаю синтаксическую ошибку:
Uncaught SyntaxError: Unexpected token **
Я могу легко обойти это, заключив в скобки -2.
(-2) ** 2 // 4
но мне любопытно, что вызвало эту ошибку. У других операторов (+ - * / % и т. д.) Такой проблемы нет. Почему это происходит у оператора **?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Интересный. Я нашел документацию по Mozilla, в которой объясняется, почему это невозможно.
Однако 2 ** -3 возможно.
Такое поведение сделано специально, чтобы вы не писали неоднозначные выражения. Из MDN:
In most languages like PHP and Python and others that have an exponentiation operator (**), the exponentiation operator is defined to have a higher precedence than unary operators such as unary + and unary -, but there are a few exceptions. For example, in Bash the ** operator is defined to have a lower precedence than unary operators. In JavaScript, it is impossible to write an ambiguous exponentiation expression, i.e. you cannot put a unary operator (+/-/~/!/delete/void/typeof) immediately before the base number.
-2 ** 2; // 4 in Bash, -4 in other languages. // This is invalid in JavaScript, as the operation is ambiguous. -(2 ** 2); // -4 in JavaScript and the author's intention is unambiguous.