2014 02 20 math pow
The spec of ECMAScript specifies some default values of Math.pow
.
console.log(Math.pow(NaN, 42) === NaN)
console.log(Math.pow(NaN, 42)); // NaN
As you can see, if the first argument is NaN
, Math.pow
returns NaN
, which is quite normal.
However, there's an exception: when the second argument is 0
(+0
or -0
).
console.log(Math.pow(NaN, 0)); // 1
When the second argument is 0
, then Math.pow
should return 1
, no matter what the first argument is.
This can be considered as a normal behavior, unless...
console.log(Math.pow(Infinity, 0), Math.pow(0, 0)); // Still 1?
Basically the spec asserts values of some indeterminate forms. Sure, some can argue that lim(x->infinity) x^0 is zero (infinity is not a real number, anyway) and 0^0 is usually considered as one, but according to the same spec...
console.log(Math.pow(1, Infinity)); // NaN
So 1^infinity is NaN
while infinity^0 is 1
. Great.