Піднесення до степеня (**)

Оператор піднесення до степеня (**) повертає результат піднесення першого операнду до показника степеня другого операнду.

Синтаксис

Оператор: var1 ** var2

Опис

Оператор піднесення до степеня правоасоціативний. a ** b ** c дорівнює a ** (b ** c).

У більшості мов, таких як PHP, Python та інших, які мають оператор піднесення до степеня (**), оператор піднесення до степеня має вищий пріоритет, ніж унарні оператори, такі як унарний + та унарний -, але існує кілька винятків. Наприклад, у Bash оператор ** має нижчий пріоритет, ніж унарні оператори.

У JavaScript неможливо написати неоднозначний вираз піднесення до степеня, тобто, ви не можете поставити унарний оператор (+/-/~/!/delete/void/typeof) одразу перед числом основи степеня.

-2 ** 2; 
// 4 у Bash, -4 у інших мовах. 
// Це помилка JavaScript, оскільки операція неоднозначна. 


-(2 ** 2); 
// -4 у JavaScript, а наміри автора однозначні. 

Зауважте, що деякі мови програмування використовують символ карет ^ для піднесення до степеня, але JavaScript використовує цей символ як оператор виключного побітового АБО (XOR).

Приклади

Базове піднесення до степеня

2 ** 3   // 8
3 ** 2   // 9
3 ** 2.5 // 15.588457268119896
10 ** -1 // 0.1
NaN ** 2 // NaN

Асоціативність

2 ** 3 ** 2   // 512
2 ** (3 ** 2) // 512
(2 ** 3) ** 2 // 64

Використання з унарними операторами

Щоб змінити знак результату виразу піднесення до степеня на протилежний:

-(2 ** 2) // -4

Щоб зробити основу степеня у виразі від'ємним числом:

(-2) ** 2 // 4

Специфікації

Специфікація
ECMAScript (ECMA-262)
The definition of 'Exponentiation operator' in that specification.

Сумісність з веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
Exponentiation (**)Chrome Full support 52Edge Full support 14Firefox Full support 52IE No support NoOpera Full support 39Safari Full support 10.1WebView Android Full support 51Chrome Android Full support 52Firefox Android Full support 52Opera Android Full support 41Safari iOS Full support 10.3Samsung Internet Android Full support 6.0nodejs Full support 7.0.0
Full support 7.0.0
Full support 6.5.0
Disabled
Disabled From version 6.5.0: this feature is behind the --harmony runtime flag.

Legend

Full support  
Full support
No support  
No support
User must explicitly enable this feature.
User must explicitly enable this feature.

Див. також