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在改变.
- 如果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(别的).
| 归档时间: |
|
| 查看次数: |
266 次 |
| 最近记录: |