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.