Web/JavaScript/Reference/Operators/Exponentiation
The exponentiation operator (**) returns the result of raising the first operand to the power of the second operand. It is equivalent to Math.pow, except it also accepts BigInts as operands.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Syntax
Operator: var1 ** var2
Description
The exponentiation operator is right-associative: a ** b ** c is equal to a ** (b ** c).
In most languages, such as PHP, 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. That is, you cannot put a unary operator (+/-/~/!/delete/void/typeof) immediately before the base number; doing so will cause a SyntaxError.
-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.
Note that some programming languages use the caret symbol ^ for exponentiation, but JavaScript uses that symbol for the bitwise logical XOR operator.
Examples
Basic exponentiation
2 ** 3 // 8
3 ** 2 // 9
3 ** 2.5 // 15.588457268119896
10 ** -1 // 0.1
NaN ** 2 // NaN
Associativity
2 ** 3 ** 2 // 512
2 ** (3 ** 2) // 512
(2 ** 3) ** 2 // 64
Usage with unary operators
To invert the sign of the result of an exponentiation expression:
-(2 ** 2) // -4
To force the base of an exponentiation expression to be a negative number:
(-2) ** 2 // 4
Specifications
| Specification |
| ECMAScript (ECMA-262)The definition of 'Exponentiation operator' in that specification. |
Browser compatibility
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
Update compatibility data on GitHub
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Exponentiation (**)
|
Chrome
Full support 52 |
Edge
Full support 14 |
Firefox
Full support 52 |
IE
No support No |
Opera
Full support 39 |
Safari
Full support 10.1 |
WebView Android
Full support 51 |
Chrome Android
Full support 52 |
Firefox Android
Full support 52 |
Opera Android
Full support 41 |
Safari iOS
Full support 10.3 |
Samsung Internet Android
Full support 6.0 |
nodejs Full support 7.0.0 Full support 7.0.0 Full support 6.5.0 Disabled' From version 6.5.0: this feature is behind the |
Legend
- Full support
- Full support
- No support
- No support
- User must explicitly enable this feature.'
- User must explicitly enable this feature.
See also
- Addition operator
- Subtraction operator
- Division operator
- Multiplication operator
- Remainder operator
- Increment operator
- Decrement operator
- Unary negation operator
- Unary plus operator
Exponentiation (**) by Mozilla Contributors is licensed under CC-BY-SA 2.5.