lynxerzhang / JSSkills

MIT License
0 stars 0 forks source link

Number使用问题记录 #15

Open lynxerzhang opened 6 years ago

lynxerzhang commented 6 years ago
var round = (function(){
    return function(d, e){
        return Number(Math.round(Number(d + "e" + e)) + "e-" + e);    
    }
})();

var floor = (function(){
    return function(d, e){
        return Number(Math.floor(Number(d + "e" + e)) + "e-" + e);    
    }
})();

var ceil = (function(){
    return function(d, e){
        return Number(Math.ceil(Number(d + "e" + e)) + "e-" + e);    
    }
})();
lynxerzhang commented 5 years ago

在js里面,唯一一个不等于自己的值类型就是NaN类型,NaN类型表达了数学计算中无意义的结果,所以两个NaN值去比较是否相等是无意义的,也就是返回false。

需要注意的是,js里面检测一个值是否为NaN, 可以使用全局方法isNaN()或者是Number.isNaN(), Number.isNaN()是isNaN的加强版,它的不同之处就在于,对传入的参数进行typeof检测,只有为number类型,才会进行检测,这是和isNaN的不同之处。

console.log(Number.isNaN("1a")); //false
console.log(isNaN("1a")); //true

看下Polyfill的实现就明白了

Number.isNaN = Number.isNaN || function(value) {
    return typeof value === "number" && isNaN(value);
}

//@see https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN