Difference between ECMAScript 2016 exponentiation operator and Math.pow()
Asked Answered
M

3

43

What is the benefit to using the ECMAScript 2016 exponentiation operator over the current Math.pow()? In other words, besides reducing key strokes, what is the difference between

Math.pow(2, 2) => 4 and 2 ** 2 => 4

Marra answered 2/6, 2016 at 20:8 Comment(1)
From a search around, it appears to be for no other reason than it looks better. There's also the potential for using the **= operator too.Demilitarize
I
47

None. As you can read in the ES7 spec, both Math.pow and the ** exponentation operator cast their arguments/operands to numbers and use the very same algorithm to determine the result.

Addendum: this changed with the introduction of the BigInt type in ES2020, whose values are only supported by operators (including **) but not the Math object.

Incommode answered 2/6, 2016 at 20:15 Comment(1)
None provided that no one's mucked about with Math or Math.pow. :-)Dowser
Z
5

Late to the party -- I just wanted to add that as much as there is no difference between the two ways, I recently came to realize that the ** exponentiation operator isn't supported in Internet Explorer, so developers that are interested in extensive cross-browser support for their applications, may prefer to choose the Math.pow(...) over the exponentiation operator.enter image description here

Zielsdorf answered 8/12, 2020 at 18:51 Comment(0)
A
0

Math.pow(2,2) === 2**2; // FALSE

Math.pow(99,99);
99 ** 99;

Result:

3.697296376497263e+197

3.697296376497268e+197

Avruch answered 2/12, 2020 at 13:13 Comment(2)
Either this was fixed since then or it's implementation-dependent, because I just checked in my browser console (Firefox on macOS) and I get the same value for both of those.Klimt
It was fixed. See bugs.chromium.org/p/v8/issues/detail?id=5848 for exampleVillosity

© 2022 - 2024 — McMap. All rights reserved.