【发布时间】:2013-11-14 11:54:12
【问题描述】:
我在previous question 中发现Math.pow(0, 0) === 1 返回true。
在the documentation 中,我们发现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)
- 如果 abs(x)
- 如果 x 为 +∞ 且 y>0,则结果为 +∞。
- 如果 x 为 +∞ 且 y
- 如果 x 为 -∞ 且 y>0 且 y 为奇数,则结果为 -∞。
- 如果 x 为 −∞ 且 y>0 且 y 不是奇数,则结果为 +∞。
- 如果 x 为 -∞ 且 y
- 如果 x 为 −∞ 且 y
- 如果 x 为 +0 且 y>0,则结果为 +0。
- 如果 x 为 +0 且 y
- 如果 x 为 -0 且 y>0 且 y 为奇数,则结果为 -0。
- 如果 x 为 -0 且 y>0 且 y 不是奇数,则结果为 +0。
- 如果 x 为 -0 且 y
- 如果 x 为 -0 且 y
- 如果 x
有趣的是,对于x 的任何值,返回值都是1。我们能否找到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 正在改变。
【问题讨论】:
-
只有一个问题:为什么需要它?
-
@VisioN 为了满足我的好奇心...?也许吧。
-
从数学上讲,0 是唯一的 x,
x pow 0不是 0,而是未定义的。不是 JavaScriptundefined,它只是一个数学规则,表明0 pow 0中没有逻辑,所以它是一个未定义的结果。它既可以是任何东西,也可以是任何东西。阅读:math.stackexchange.com/questions/11150/… -
您指出的文档不是很清楚地提到对于 y = 0 或 y=-0,无论如何,结果都是 1?
-
@イオニカ ビザウ 我没有说 JavaScript 的
Math.pow的结果是什么,我只是说明了它背后的数学哲学是什么。
标签: javascript node.js