我在上一个问题中发现Math.pow(0, 0) === 1
返回true
.
在文档中,我们发现以下规则x^y
:
- 如果 y 为 NaN,则结果为 NaN。
- 如果 y 为 +0,则结果为 1,即使 x 为 NaN。
- 如果 y 为 -0,则结果为 1,即使 x 为 NaN。
- 如果 x 为 NaN 且 y 为非零,则结果为 NaN。
- 如果 abs(x)>1 且 y 为 +∞,则结果为 +∞。
- 如果 abs(x)>1 且 y 为 -∞,则结果为 +0。
- 如果 abs(x)==1 且 y 为 +∞,则结果为 NaN。
- 如果 abs(x)==1 且 y 为 -∞,则结果为 NaN。
- 如果 abs(x)<1 且 y 为 +∞,则结果为 +0。
- 如果 abs(x)<1 且 y 为 -∞,则结果为 +∞。
- 如果 x 为 +∞ 且 y>0,则结果为 +∞。
- 如果 x 为 +∞ 且 y<0,则结果为 +0。
- 如果 x 为 -∞ 且 y>0 且 y 为奇数,则结果为 -∞。
- 如果 x 为 -∞ 且 y>0 且 y 不是奇数,则结果为 +∞。
- 如果 x 为 -∞ 且 y<0 且 y 为奇数,则结果为 -0。
- 如果 x 为 -∞ 且 y<0 且 y 不是奇数,则结果为 +0。
- 如果 x 为 +0 且 y>0,则结果为 +0。
- 如果 x 为 +0 且 y<0,则结果为 +∞。
- 如果 x 为 -0 且 y>0 且 y 为奇数,则结果为 -0。
- 如果 x 为 -0 且 y>0 且 y 不是奇数,则结果为 +0。
- 如果 x 为 -0 且 y<0 且 y 为奇数,则结果为 -∞。
- 如果 x 为 -0 且 y<0 且 y 不是奇数,则结果为 +∞。
- 如果 x<0 且 x 是有限的且 y 是有限的且 y 不是整数,则结果为 NaN。
有趣的是,对于任何值x
的返回值都是1
. 我们能找到返回值 NOT 的任何值x
吗?Math.pow(x, 0)
1
我在 NodeJS shell 中尝试了以下操作,但我想在浏览器控制台中结果相同:
> Math.pow(undefined, 0)
1
> Math.pow(Date(), 0)
1
> Math.pow("asd", 0)
1
> Math.pow(function () {}, 0)
1
> Math.pow(function () { return 3}, 0)
1
> Math.pow([], 0)
1
> Math.pow(null, 0)
1
也许我们找到了一个 JS 技巧来做到这一点,就像在x === x // false
(where isNaN(x) === false
)的情况下一样。
只是为了澄清:y
将永远是0
。只是x
在变。