ES6-Math对象扩展

来源:互联网 发布:大英百科全书数据库 编辑:程序博客网 时间:2024/04/30 13:17
ES6在Math对象上新增了17个Math对象的方法。

①Math.trunc()

Math.trunc()方法用于去除一个数的小数部分,返回整数部分。


参数为非数值时,Math.trunc()方法会先用Number()将其转换为数值,若无法获取数值的整数部分,比如字符串或NaN或空值等,会返回NaN.


②Math.sign()

Math.sign()方法用来判断一个数到底是正数、负数还是0
(1)参数为正数返回+1
(2)参数为负数返回-1
(3)参数为0返回0
(4)参数为-0返回-0
(5)其他值返回NaN


③Math.cbrt()

Math.cbrt()方法用于计算一个数的立方根
若参数不是数值,Math.cbrt()也先用Number()方法将其转换为数值。
转换失败返回NaN.


④Math.clz32()

JavaScript的整数使用32位二进制形式表示,Math.clz32()方法返回一个数的32位无符号整数有多少个前导0.clz是Count Leading Zero (bit in 32-bit binary representation of a number)的缩写。


(1)左移运算符与Math.clz32方法直接相关。


(2)对于小数,Math.clr32方法只考虑整数部分。若非有效数值,会将它们先转换为数值再进行计算。



⑤Math.imul()

Math.imul方法返回两个数以32位带符号整数形式相乘的结果,返回的也是一个32位带符号整数。

如果只考虑最后32位,大多数情况下,Math.imul(a, b)与a * b的结果是相同的,即该方法等同于(a * b)|0的效果(超过32位的部分溢出)。之所以需要部署这个方法,是因为JavaScript有精度限制,超过2的53次方的值无法精确表示。这就是说,对于那些很大的数的乘法,低位数值往往都是不精确的,Math.imul方法可以返回正确的低位数值。

(0x7fffffff * 0x7fffffff)|0 // 0
上面这个乘法算式,返回结果为0。但是由于这两个二进制数的最低位都是1,所以这个结果肯定是不正确的,因为根据二进制乘法,计算结果的二进制最低位应该也是1。这个错误就是因为它们的乘积超过了2的53次方,JavaScript无法保存额外的精度,就把低位的值都变成了0。Math.imul方法可以返回正确的值1。

Math.imul(0x7fffffff, 0x7fffffff) // 1

⑥Math.fround()

Math.fround方法返回一个数的单精度浮点数形式。

对于整数来说,Math.fround方法返回结果相同,区别在于无法用64位二进制位精确表示的小数,这时会返回最接近这个小数的单精度浮点数。

⑦Math.hypot()

Math.hypot方法返回所有参数的平方和的平方根。

Math.hypot()会把非数值参数转换为数值,若有一个参数不能转为数值就返回NaN.

⑧ES6新增了四个对数相关方法

(1)Math.expm1(x)返回ex - 1,即Math.exp(x) - 1
(2)Math.log1p(x)方法返回1+x的自然对数,即Math.log(1+x),若x<-1则返回NaN.
(3)Math.log10(x)方法返回以10为底的x的对数,若x小于0则返回NaN.
(4)Math.log2(x)返回以2为底的x的对数,若x小于0则返回NaN.

⑨三角函数方法

ES6新增了6个三角函数方法.
(1)Math.sinh(x) 返回x的双曲正弦
(2)Math.cosh(x) 返回x的双曲余弦
(3)Math.tanh(x) 返回x的双曲正切
(4)Math.asinh(x) 返回x的反双曲正弦
(5)Math.acosh(x) 返回x的反双曲余切
(6)Math.atanh(x) 返回x的反双曲正切


⑩ES7增加了一个指数运算符**,可以与等号结合

2**3//8
let a=2;
a**=2;//等价于a=a**a;
0 0
原创粉丝点击