Почему возникает синтаксическая ошибка, если левый операнд оператора возведения в степень отрицательный?

Когда я использую оператор экспоненты (**) в JavaScript, он обычно работает должным образом:

2 ** 2   // 4
2 ** -2  // 0.25

Но когда левый операнд отрицательный

-2 ** 2

Я получаю синтаксическую ошибку:

Uncaught SyntaxError: Unexpected token **

Я могу легко обойти это, заключив в скобки -2.

(-2) ** 2 // 4

но мне любопытно, что вызвало эту ошибку. У других операторов (+ - * / % и т. д.) Такой проблемы нет. Почему это происходит у оператора **?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
0
87
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Интересный. Я нашел документацию по Mozilla, в которой объясняется, почему это невозможно.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Exponentiation

Однако 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.

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