Оператор ** возвращает результат первой переменной в степени второй переменной. То есть Math.pow(a,b).

var a = 2;
var b = 5;
a ** b; // 32
Math.pow(a, b); // 32

Если нам нравится a ** b ** c , , тогда операция вычисляется справа налево, то есть a ** (b**c)

var a = 5, b = 2, c = 2;
a ** b ** c; // 625
// Execution order of a ** b ** c;
(5 ** (2 ** 2) )
(5 ** 4)
625

Нельзя ставить унарный оператор (+/-/~/!/delete/void/typeof) непосредственно перед базовым числом.

// Invalid Operations
+a ** b;
-a ** b;
~a ** b;
!a ** b;
delete a ** b;
void a ** b;
typeof a ** b;
// All the above operation are invalid and result in 
Uncaught SyntaxError: Unary operator used immediately before exponentiation expression. Parenthesis must be used to disambiguate operator precedence

Обработка отрицательных чисел

-2 ** 2; //invalid
// The above expression can be converted into 
(-2) ** 2; // 4
(-2) ** 3; //-8 

Любая операция с NaN равна NaN

NaN ** 1; //NaN
NaN ** NaN;  // NaN

Что произойдет при использовании undefined:

1  ** undefined; // NaN
// because
1 ** Number(undefined);
1 ** NaN; // NaN

Аналогично, когда мы делаем ** на null, Number(null) → 0, поэтому степень 0 равна 1.

10 ** null; // 1
// because
10 ** Number(null); // Number(null) --> 0
10 ** 0; // 1

Если вы найдете этот полезный сюрприз, то я здесь.

Поделитесь, если вы счастливы 😃 😆 🙂.

Подпишитесь на Javascript Jeep🚙💨