ECMAScript之Number

number

你认识的NaN?

 

思考了片刻,我先来说一下我的一些认知:

   1. ECMAScript 1引入的

   2. 全局对象的属性

   3. 在高级浏览器是只读属性

   4. 与任何值都不相等,包括自己

那如何判定参数是否是NaN?

有的同学应该会想到 isNaN

但是请看下面的代码:

        isNaN(1);   //false

        isNaN("本内容来自w3cplus");           //true
        isNaN("我是NaN Family,选我选我~");   //true  种了阿妹的毒

        isNaN(NaN);  //true
        isNaN({});   //true
        isNaN(undefined); //true

很多同学从上面的代码中也应该知道,全局的这个isNaN其实还有一些"副作用":

      比如对参数为{}和undefined的也会返回true。 那么咋搞呢?

isNaN 与 Number.isNaN

 

isFinite 与 Number.isFinite

isInteger 与 Number.isInteger

Number.fn 的参数 typeof 为 number ,不具转参数的能力

isNaN ,isFinite , isInteger 可

var e = '1';

isInteger(e); 为true;

 

 

1. Number.isNaN

语法:

        Number.isNaN(source);
    

我们再来看一下下面的示例:

        Number.isNaN({});        //false
        Number.isNaN(undefined); //false
        Number.isNaN("本内容来自w3cplus");    //false
        

        Number.isNaN(NaN);   //true
        Number.isNaN(0/0);   //true

来自官方wiki的一个兼容版本:

        //给一些低级浏览器
        function isNaNfn(source){
            return typeof source === 'number' && isNaN(source);
        }

2. Number.isFinite

看到isFinite,应该有同学也会想起那个全局的isFinite,其实他们功能上都是判定指定参数是否是有限数值,那他们有啥区别呢?

我们来看一下示例代码:

        isFinite(1);  //true
        isFinite("1"); //true

        Number.isFinite(1);    //true
        Number.isFinite("1");  //false    

很直观地看出,isFinite会对参数进行“类型转换”,但是Number.isFinite不具备这种功能

3. Number.isInteger

这个函数可以直接来判定参数是否是整数,非常直观&方便

代码示例:

        Number.isInteger(0);     //true
        Number.isInteger("10");  //false
        Number.isInteger(0.1);   //false
        Number.isInteger(NaN);   //false
        Number.isInteger("a");   //false  

说明:该方法也不会自动进行参数类型转换~

顺便送上一个官方wiki的解决方案:

        //2的52+1次方是多少?
        function isInteger(source){
            return typeof source === 'number' && isFinite(source) && source > -9007199254740992 && source < 9007199254740992 && Math.floor(source) === source;
        }
    

内容参考:

转载于:https://www.cnblogs.com/FineDay/articles/3549149.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值