Math的扩展
Math.trunc()
Math.trunc 用于除去一个数的小数部分。
1 | Math.trunc(111.22) //111 |
Math.sign()
Math.sign 用于判断一个数到底是正数、负数、还是零。
- 参数为正数,返回+1
- 参数为负数,返回-1
- 参数为 0,返回 0
- 参数为-0,返回-0
- 其他值,返回 NaN
1 | //代码模拟 |
Math.cbrt()
Math.cbrt 用于计算一个数的立方根,对于非数值,内部也是先使用 Number 方法转换为数值。
1 | //代码模拟 |
Math.clz32()
Math.clz32 返回一个数的 32 位无符号整数形式有多少个前导 0.
1 | Math.clz32(0) //32 |
对于小数,Math.clz32()只考虑整数部分
1 | Math.clz32(3.9) //30 |
Math.imul()
Math.imul 返回两个数以 32 位带符号整数形式相乘的结果,返回的也是一个 32 位带符号整数。
对于很大数的乘法,低位数值往往是不精确的,Math.imul()方法可以正确的返回低位数值。
Math.fround()
Math.fround 方法返回一个数的单精度浮点数形式。
对于整数来说,Math.fround()方法的返回结果不会有任何不同,区别主要在于那些无法用 64 个二进制位精确表示的小数。这时,Math.fround()方法会返回最接近这个小数的单精度浮点数。
1 | //代码模拟 |
Math.hypot()
Math.hypot 方法返回所有参数的平方和的平方根。
1 | Math.hypot(3, 4) //5 |
Math.expm1()
Math.expm1(x)返回$e^x-1$, 即 Math.exp(x) - 1;
1 | //代码模拟 |
Math.log1p()
Math.log1p(x)返回$ln(1+x)$,即 Math.log(1 + x)。如果 x 小于-1,则返回 NaN。
1 | //代码模拟 |
Math.log10()
Math.log10(x)返回$log_{10}(x)$,如果 x 小于 0,返回 NaN。
1 | //代码模拟 |
Math.log2()
Math.log2(x)返回$log_2(x)$,如果 x 小于 0,返回 NaN。
1 | //代码模拟 |
双曲函数方法
ES6 新增了六个双曲函数方法
- Math.sinh(x) 返回 $sinh\ x=\frac{e^x-e^{-x}}{2}$
- Math.cosh(x) 返回 $cosh\ x=\frac{e^x+e^{-x}}{2}$
- Math.tanh(x) 返回 $tanh\ x=\frac{sinh\ x}{cosh\ x}=\frac{e^x-e^{-x}}{e^x+e^{-x}}$
- Math.asinh(x) 返回 $arsinh\ x=ln(x+\sqrt[\ ]{x^2+1})$
- Math.acosh(x) 返回 $arsinh\ x=ln(x+\sqrt[\ ]{x^2-1})$
- Math.atanh(x) 返回 $artanh\ x=\frac{1}{2}ln\frac{1+x}{1-x}$
Math.sign()
Math.sign 用来判断一个数的正负,如果参数是-0,会返回-0。
指数运算符**
1 | 2 ** 2 //4 |
**在 V8 引擎中,指数运算符与 Math.pow 的实现不相同,对于特别大的运算结果,两者会有差异**