数值的扩展
概述
ES6提供了许多新的数值的扩展
二进制和八进制表示法
二进制使用前缀0b或0B,八进制使用前缀0o或0O
ex:
0b111110111 === 503 // true 0o767 === 503 // true
如果要将0b
和0o
前缀的字符串数值转为十进制,要使用Number
方法。
ex:
Number('0b111') // 7 Number('0o10') // 8
Number
1.Number.isFinite()
用来检查一个数值是否为有限的(finite),对于非数值一律返回false。
2.Number.isNaN()
用来检查一个值是否为NaN
。Number.isNaN()
只有对于NaN
才返回true
,非NaN
一律返回false。
以上两个方法与传统的全局方法isFinite()
和isNaN()
的区别在于,传统全局方法先调用Number()
将非数值的值转为数值,再进行判断,而以上两个新方法只对数值有效。
isFinite(25) // true isFinite("25") // true Number.isFinite(25) // true Number.isFinite("25") // false isNaN(NaN) // true isNaN("NaN") // true Number.isNaN(NaN) // true Number.isNaN("NaN") // false Number.isNaN(1) // false
3.ES6 将全局方法parseInt()
和parseFloat()
,移植到Number
对象上面,Number.parseInt(),Number.parseFloat()行为完全保持不变。这样做的目的,是逐步减少全局性方法,使得语言逐步模块化.
// ES5的写法 parseInt('12.34') // 12 parseFloat('123.45#') // 123.45 // ES6的写法 Number.parseInt('12.34') // 12 Number.parseFloat('123.45#') // 123.45 Number.parseInt === parseInt // true Number.parseFloat === parseFloat // true
4.Number.isInteger()
用来判断一个值是否为整数。但是注意15和15.0被视为同一个值。
Number.isInteger(25) // true Number.isInteger(25.0) // true Number.isInteger(25.1) // false Number.isInteger("15") // false Number.isInteger(true) // false
Math对象
1.Math.trunc()
Math.trunc方法用于去除一个数的小数部分,返回整数部分。对于非数值,先用Number()方法转化为数值,对于空值和无法截取整数的值,返回NaN
ex:
Math.trunc(4.1) //4 Math.trunc(-4.1) //-4 Math.trunc('3.1415') //3 Math.trunc(NaN) //NaN Math.trunc('foo') //NaN Math.trunc() //NaN
2.Math.sign()
Math.sign()方法判断一个数是正数,负数,还是0.非数值先转换为数值
- 参数为正数,返回+1
- 参数为负数,返回-1
- 参数为0,返回0
- 参数为-0,返回-0
- 其他值,返回NaN
Math.sign(-5) // -1 Math.sign(5) // +1 Math.sign(0) // +0 Math.sign(-0) // -0 Math.sign(NaN) // NaN Math.sign('9'); // +1 Math.sign('foo'); // NaN Math.sign(); // NaN
3.Math.cbrt()
该方法用于计算一个数的立方根。同样,非数值先转换为数值。
参考资料