Выполнив в консоли браузера написать: синтаксис ошибка: непредвиденная лексема **`. Попробовав его в узел:
> -1**2
...
...
...
...^C
Я думал, что это арифметическое выражение, где * *
- это оператор питания. Нет таких проблем с другими операторами.
Странно, набрав */
на второй линии инициирует выполнение:
> -1**2
... */
-1**2
^^
SyntaxError: Unexpected token **
Что здесь происходит?
выполнив в консоли браузера пишет синтаксис ошибка: неожиданный знак **.
Потому что'ы спецификаций. Разработана таким образом, чтобы избежать путаницы о том, что он'ы площадь отрицания (т. е.(-1) ** 2
), или отрицание площади (т. е.-(1 ** 2)
). Этот дизайн был результатом широкое обсуждение с приоритетом операторов, и экспертизу, как это делается в других языках, и наконец решение было принято, чтобы избежать непредсказуемого поведения, делая это синтаксическая ошибка.
В JavaScript, это невозможно написать неоднозначный возведение в степень выражения, т. е. нельзя поставить унарный оператор (
+
/-
/~
/!
/удалить
/пустота
/для вызова typeof
) непосредственно перед щелочное число.
Причину тоже объяснил в том же тексте:
В большинстве языков, таких как PHP и Python и другим, что есть оператор возведения в степень (обычно
^
или**
), оператор возведения в степень определяется, чтобы иметь более высокий приоритет, чем унарные операторы, такие как унарный+
и унарный-
, но есть несколько исключений. Например, в bash оператор**
определяется, чтобы иметь более низкий приоритет, чем унарные операторы.
Поэтому, чтобы избежать путаницы, было решено, что код должен избежать двусмысленности и четко поставить скобки:
(-1)**2
или:
-(1**2)
Как Примечание стороны, в бинарные -
не рассматривается как имеющий более низкий приоритет, и поэтому последнее выражение имеет тот же результат, что это верное выражение:
0-1**2
Как уже подтвердили в вышеприведенной цитаты, в большинстве языков программирования, которые имеют инфиксной оператора возведения в степень, дать более высокий приоритет для оператора, чем унарный минус.
Вот некоторые другие примеры языков программирования, которые дают более высокий приоритет для оператора унарного минуса: