ES6 Number扩展

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
}
发布了102 篇原创文章 · 获赞 26 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/xuelian3015/article/details/95261107