Мои задачи по Javascript
Случайная задача
Список всех задач

Задача 47

console.log(-3 ** 3);
Что выведет консоль?
1
2
3
4
5
← Задача 46Задача 48 →
Пояснение Это любопытная задача для тех, кому интересен, как устроен JavaScript.
Знак минус здесь - это оператор "unary negation" (унарное отрицание, т.е. унарный минус), а вовсе не часть литерала отрицательного числа и даже вовсе не оператор "subtraction" (вычитание).
В записи -3 литералом числа является только цифра 3, а слева от числа стоит оператор "unary negation".

FireFox для строки из задачи напишет:
SyntaxError: unparenthesized unary expression can't appear on the left-hand side of '**'

А Chrome для такой строки напишет:
SyntaxError: Unary operator used immediately before exponentiation expression. Parenthesis must be used to disambiguate operator precedence

Аналогичная ошибка была бы при использовании унарного плюса.

Чтобы возвести в степень "отрицательный литерал" (хотя реально это уже выражение, а не литерал), нужно использовать скобки:
console.log( (-3) ** 3 ); // -27
Кстати, у унарного минуса приоритет 17, у возведения в степень приоритет 16, у вычитания приоритет 14.



Написать сообщение - отзыв, пожелание и т.п.