1.Number.isFinite(), Number.isNaN()
ES6 在Number对象上,新提供了Number.isFinite()和Number.isNaN()两个方法。
Number.isFinite()用来检查一个数值是否为有限的(finite),即不是Infinity。
注意,如果参数类型不是数值,Number.isFinite一律返回false。
它们与传统的全局方法isFinite()和isNaN() 的区别在于:
传统的全局方法会先调用Number()将非数值的值转为数值,在进行判断;而这两个新方法只对数值有效。
Number.isFinite()对于非数值一律返回false,Number.isNaN()只对NaN才返回true。
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对象上面,行为完全保持不变。
Number.parseInt === parseInt // true
Number.parseFloat === parseFloat // true
3.Number.isInteger()
用来判断一个数值是否为整数,但是在js中存储整数和存储浮点数是用同一种方法,所以25和25.0是同一个值。
4.Number.EPSILON
Number.EPSILON实际上是 JavaScript 能够表示的最小精度(等于 2 的 -52 次方)。误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。
eg:误差范围设为 2 的-50 次方(即Number.EPSILON * Math.pow(2, 2)),即如果两个浮点数的差小于这个值,我们就认为这两个浮点数相等。
function withinErrorMargin (left, right) {
return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2);
}
0.1 + 0.2 === 0.3 // false
withinErrorMargin(0.1 + 0.2, 0.3) // true
1.1 + 1.3 === 2.4 // false
withinErrorMargin(1.1 + 1.3, 2.4) // true
JavaScript 能够准确表示的整数范围在-253到253之间(不含两个端点),超过这个范围,无法精确表示这个值。
Math对象的扩展
ES6在Math对象上新增了17个与数学相关的方法,所有这些方法都是静态方法,只能在Math对象上调用。
(1)Math.trunc()
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
(2)Math.sign()
用来判断一个数到底是正数,负数,还是零。对于非数值,会先将其转换为数值。
(3)Math.cbrt()
计算一个数的开立方根
Math.cbrt(8);// 2
(4)Math.hypot()
Math.hypot方法返回所有参数的平方和的平方根。
Math.hypot(3, 4); // 5
还有指数,对数的计算方法,目前还用不到,暂时不写