数值的扩展方法
Number.isFinite()、Number.isNaN()
- 在数值上提供这两种方法来检查infinite和NaN这两个特殊值。
- 它们和传统的全局方法isFinite和isNaN方法的区别在于,传统方法先调用Number将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效,非数值一律返回false。
Number.parseInt()、Number.parseFloat()
Number.isInteger()
该方法用来判断一个值是否是整数。特别注意的是:再js内部,整数和浮点数是同样的储存方法,所以3和3.0被视为同一个值
完全整数和Number.isSafeInteger()
- js能够准确表示的整数范围在-2^53到2^53之间(不含两个端点),超过这个范围,就无法精确表示这个值。
- ES6引入了Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER这两个常量,用来表示这个范围的上下限。
- Number.isSafeInteger()是用来判断一个整数是否是落在这个范围之内
- 注意:验证运算结果是否落在安全整数范围时,不要只验证运算结果,而要同时验证参与运算的每个值
Number.isSafeInteger(Number.MAX_SAFE_INTEGER - 1) //false
Math对象的扩展
- Math.trunc方法用于去除一个数的小数部分,返回整数部分;对于非数值,Math.trunc内部使用Number方法将其先转为数值,对于空值和无法截取整数的值,返回NaN
- Math.sign方法用来判断一个数到底是正数、负数还是零。它会返回五种值:
- 参数为正数,返回+1
- 参数为负数,返回-1
- 参数为0,返回0
- 参数为-0,返回-0
- 其他值,返回NaN
- Math.cbrt方法用于计算一个数的立方根,对于非数值,Math.cbrt方法内部也是先使用Number方法将其转为其他数值
- Math.clz32:js的整数使用32位二进制表示,Math.clz32方法返回一个数的32位无符号整数形式有多少个前导0(也就是第一个非零数之前的零的个数)
- Math.imul方法返回了两个数以32位带符号整数形式相乘的结果,返回的也是一个32位的带符号整数
Math.imul(2,-2) //-4
。如果只考虑最后32位,大多数情况下,该方法域a* b的结果是一样的,该方法等同于(a* b)|0的效果(超过32位的溢出)。之所以需要这个方法,是因为js有精度限制,超过2的53次方的值无法精确表示。这就是说,对于哪些很大数的乘法,低位数值往往都是不精确的,而该方法可以返回正确的低位数值 - Math.found方法返回一个数的单精度浮点数形式。对于整数来说,Math.found方法返回结果不会有任何不同,区别主要是哪些无法使用64个二进制位精确表示的小数。这时,Math.found方法会返回最接近这个小数的单精度浮点数。
- Math.hypot方法返回所有参数的平方和的平方根
Math.hypot(3,4)//5
如果参数不是数值,Math.hypot先将其转为数值。只要有一个参数无法转为数值,就会返回NaN - Math.expml返回e^x-1即Math.exp(x)-1
- Math.log1p返回l+x的自然对数,即Math.log(1+x)。如果x小于-1,返回NaN
- Math.log0返回以10为底 的x的对数。如果x小于0,则返回NaN
- Math.log2返回以2为底的x的对数。如果x小于零,则返回NaN
- 三角函数方法
- Math.sinh(x)返回x的双曲正弦
- Math.cosh(x)返回x的双曲余弦
- Math.tanh(x)返回x的双曲正切
- Math.asinh(x)返回x的反双曲正弦
- Math.acosh(x)返回x的反双曲余弦
- Math.atanh(x)返回x的反双曲正切
指数运算符
ES7新增了一个指数运算符(** ),目前Babel转码器已经支持
1 | 2 ** 2 //4 |
指数运算符可以和等号结合,形成一个新的赋值运算符(* * = )
1 | let b=3; |