1、Number.isFinite(), Number.isNaN()
ES6 在Number对象上,新提供了Number.isFinite()和Number.isNaN()两个方法。
- Number.isFinint()用来检查一个数值是否为有限的,即不是Infinity
- Number.isNaN()用来检查一个值是否为NaN
Number.isFinite(15)
// true
Number.isFinite(0.8)
/// true
Number.isFinite(NaN)
// false
Number.isFinite(Infinity)
// false
Number.isFinite(-Infinity)
// false
Number.isFinite('foo')
// false
Number.isFinite('15')
// false
Number.isFinite(true)
// false
如果参数类型不是数值,Number.isFinite一律返回false
Number.isNaN(NaN)
// true
Number.isNaN(15)
// false
Number.isNaN('15')
// false
Number.isNaN(true)
// false
Number.isNaN(9/NaN)
// true
Number.isNaN('true' / 0)
// true
Number.isNaN('true' / 'true')
// true
如果参数类型不是NaN,Number.isNaN一律返回false
Number.isFinite(),Number.isNaN()与传统全局方法isFinite(),isNaN()的区别:
传统方法先调用Number()将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效,
Number.isFinite()对于非数值一律返回false, Number.isNaN()只有对于NaN才返回true,非NaN一律返回false
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
2、Number.parseInt(), Number.parseFloat()
ES6 将全局方法parseInt()和parseFloat(),移植到Number对象上面,行为完全保持不变。>这样做的目的,是逐步减少全局性方法,使得语言逐步模块化。
// 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
3、Number.isInteger()
Number.isInteger()用来判断一个数值是否为整数
Number.isInteger(25)
// true
Number.isInteger(25.1)
// false
如果参数不是数值,Number.isInteger返回false
Number.isInteger()
// false
Number.isInteger(null)
// false
Number.isInteger('15')
// false
Number.isInteger(true)
// false
4、Number.EPSILON
ES6 在Number对象上面,新增一个极小的常量Number.EPSILON。根据规格,它表示 1 与大于 1 的最小浮点数之间的差,引入一个这么小的量的目的,在于为浮点数计算,设置一个误差范围。我们知道浮点数计算是不精确的
Number.EPSILON
// 2.220446049250313e-16
5、安全整数和 Number.isSafeInteger()
JavaScript 能够准确表示的整数范围在-253到253之间(不含两个端点),超过这个范围,无法精确表示这个值。
ES6 引入了Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER这两个常量,用来表示这个范围的上下限。
Number.isSafeInteger()则是用来判断一个整数是否落在这个范围之内。
Number.isSafeInteger('a')
// false
Number.isSafeInteger(null)
// false
Number.isSafeInteger(NaN)
// false
Number.isSafeInteger(Infinity)
// false
Number.isSafeInteger(-Infinity)
// false
Number.isSafeInteger(3)
// true
Number.isSafeInteger(1.2)
// false
Number.isSafeInteger(9007199254740990)
// true
Number.isSafeInteger(9007199254740992)
// false
Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1)
// false
Number.isSafeInteger(Number.MIN_SAFE_INTEGER)
// true
Number.isSafeInteger(Number.MAX_SAFE_INTEGER)
// true
Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1)
// false
6、Math 对象的扩展
Math.trunc方法用于去除一个数的小数部分,返回整数部分
Math.trunc(4.1)
// 4
Math.trunc(4.9)
// 4
Math.trunc(-4.1)
// -4
Math.trunc(-4.9)
// -4
Math.trunc(-0.1234)
// 0
对于非数值,Math.trunc内部使用Number方法将其先转为数值
Math.trunc('123.456')
// 123
Math.trunc(true)
// 1
Math.trunc(false)
// 0
Math.trunc(null)
// 0
对于空值和无法截取整数的值,返回NaN
Math.trunc(NaN);
// NaN
Math.trunc('foo');
// NaN
Math.trunc();
// NaN
Math.trunc(undefined)
// NaN
Math.sign
Math.sign方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值,它会返回五种值
- 参数为正数,返回+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('')
// 0
Math.sign(true)
// +1
Math.sign(false)
// 0
Math.sign(null)
// 0
Math.sign('9')
// +1
Math.sign('foo')
// NaN
Math.sign()
// NaN
Math.sign(undefined)
// NaN
Math.cbrt
Math.cbrt方法用于计算一个数的立方根
Math.cbrt(-1)
// -1
Math.cbrt(0)
// 0
Math.cbrt(1)
// 1
Math.cbrt(2)
// 1.2599210498948734
对于非数值,Math.cbrt方法内部也是先使用Number方法将其转为数值
Math.cbrt('8')
// 2
Math.cbrt('hello')
// NaN
网友评论