ES6在number对象上提供了Number.isFinite()和Number.isNaN(),
Number.isFinite()方法确认一个数值是否是有限的
Number.isFinite(35);//true
Number.isFinite("454");//false
Number.isFinite("fvdfb");//false
Number.isNaN()方法用于确认一个值是否为NaN
和传统JavaScript提供的全局isFinite()、isNaN()方法比较,ES6提供的新方法只对数值有效,非数值的一律返回false,Number.isNaN()只对NaN有效,非NaN的直接返回false。传统方法则是先使用Number()把非数值转化为数值,再进行判断。
Number.parseInt()、Number.parseFloat()
和全局方法parseInt()、parseFloat()功能一致,只是在写法上稍微改动;
ES5写法:
parseInt(3434.45);//3434
parseFloat(3434.45);//3434.45
ES6写法:
Number.parseInt(3434.45);//3434
Number.parseFloat(3434.45);//3434.45
在JavaScript中,整数和浮点数使用同样的存储方法,如:5和5.0是等价的。
ES6提供了Number.isInteger(),用于判定一个数值是否为整数,
Number.isInteger(25);//true
Number.isInteger(25.0);//true
Number.isInteger(25.9);//false
Number.EPSILON
Number对象上面新增一个极小的常量,目的是为了在于计算浮点数时设置一个误差范围。如果误差小于Number.EPSILON,则认为是得到一个准确的结果。
Number.EPSILON;
//2.220446049250313e-16
var num = 0.1 + 0.2 - 0.3;
console.log(num < Number.EPSILON);//true
javascript可以准确表示的整数的范围是-2的53次方到2的53次方之间,超出这个范围就没法准确表示。
ES6提供了
Number.MIN_SAFE_INTEGER和Number.MAX_SAFE_INTEGER
表示该范围的上下限
Number.MIN_SAFE_INTEGER === Math.pow(-2, 53) + 1;//true
Number.MAX_SAFE_INTEGER === Math.pow(2, 53) - 1;//true
Number.isSafeInteger()
判断一个整数知否在该范围内。
Number.isSafeInteger()原理就是将参数和安全范围的上下限进行比较;
Number.isSafeInteger = function(num) {
reutrn(typeof num === 'number' &&
Math.round(num) === num &&
Number.MIN_SAFE_INTEGER <= num &&
Number.MAX_SAFE_INTEGER >= num
)
}
在使用该方法时,不仅仅要验证计算的结果,同时也要验证参与计算的每个数,否则计算的结果可能是有误的,如下:
console.log(Number.isSafeInteger(9007199254740993));//false
console.log(9007199254740993 - 990); //9007199254740002
正确返回应该是9007199254740003
检验参与计算的每个数值:
function trusty(left, right, result) {
if (Number.isSafeInteger(left) && Number.isSafeInteger(right) && Number.isSafeInteger(result)) {
return result
} else {
throw new RangeError('计算有误!')
}
}
trusty(9007199254740993, 990, 9007199254740993 - 990);
//RangeError: 计算有误!
Math对象的扩展
Math.E :自然对数的底数
Math.LN10 :10 的自然对数
Math.LOG10E : e以10为底的对数
Math.PI : 常量π
Math.SQRT1_2 : 2的平方根的倒数
Math.SQRT2 : 2的平方根
Math.abs() : 绝对值
Math.acos()计算反余弦值。
Math.asin()计算反正弦值。
Math.atan()计算反正切值。
Math.atan2()计算从X轴到指定点的角度。
Math.ceil()对一个数字向上取整。
Math.cos()计算余弦值。
Math.exp()计算e的乘方。
Math.floor()对一个数字向下取整。
Math.log()计算自然对数。
Math.max()返回两个数中较大的那个。
Math.min()返回两个数中较小的那个。
Math.pow()计算x的y次方
Math.random()计算一个随机数。
Math.round()四舍五入。
Math.sin()计算正弦值。
Math.sqrt()计算平方根。
Math.tan()计算正切值。
Math.trunc() 去除小数部分
在不支持此方法的环境中:
Math.trunc = Math.trunc || function(num) {
return num < 0 ? Math.ceil(num) : Math.floor(num)
}
Math.sign() :判断一个数是正数还是负数,还是零。为正数返回1;为负数返回-1;参数为0,则返回0;参数为-0,则返回-0,其他返回NaN
如果在不支持该方法的环境中,则:
Math.sign = Math.sign || function(num){
num =+num;
if(num===0 || isNaN(num)){
return num
}
return num > 0 ? 1 : -1
}