Math.pow(x,0)是否为1时,是否有任何`x`值?

Ion*_*zău 2 javascript node.js

我在之前的一个问题中找到了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.我们可以找到任何价值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
Run Code Online (Sandbox Code Playgroud)

也许我们找到了一个JS技巧,就像在x === x // false(where isNaN(x) === false)情况下一样.


只是为了澄清:y将永远0.只是x在改变.

Gar*_*eth 8

您从文档中复制/粘贴包含以下要求:

  • 如果y为+0,则结果为1,即使x为NaN

所以看起来你的问题的答案是"不"

  • `如果y是+ 0,结果是1`对我来说似乎很明确 (3认同)

Qan*_*avy 6

不,从来没有任何结果不会运行的情况.该函数定义表明:

  • 如果y是NaN,则结果为NaN.
  • 如果y为+0,则结果为1,即使x为NaN.
  • 如果y为-0,则结果为1,即使x为NaN.

所有参数在运行之前都被强制转换为数字类型,因此无论它是什么1.如果多个结果适用,则第一个适用的顺序是返回的结果,在本例中为1.

正如你所说y为0,因此它不是 NaN,因此不会返回NaN.

ES5 §15.8.2:

以下每个Math对象函数都将ToNumber抽象运算符应用于其每个参数(如果存在多个参数,则按从左到右的顺序),然​​后对生成的Number值执行计算.

其不是(即满足号码的格式或字符串)数字的任意参数将被任一强制为0(为null,false""),1(对true)或NaN(别的).