JS扫盲:你不知道的isNaN()

作者: 林一一呢 | 来源:发表于2021-02-09 10:07 被阅读0次

    类型分类

    • 原始类型:Number,String,Boolean,null,undefined,symbol(ES6新增)
    • 引用类型:object(数组,Data,正则...),function

    原始类型

    number

    • isNaN 用来判断 NaN,先将参数尝试强制转化成数字,返回boolean

    基本概念:isNaN() 函数用来确定一个值是否为NaN.

    基本示例:

    //1
    isNaN(NaN);       // true
    
    //2
    isNaN(true);      // false
    isNaN(false);     // true
    
    //3
    isNaN(37);        // false
    isNaN('37');      // false
    
    //4
    isNaN(null);       // false
    isNaN(undefined);  // true
    
    //5
    isNaN({});        // true
    isNaN({name: 'LinYY'});        // true
    

    思考:上面 4 中的结果为什么 null 是 false 呢?undefined 结果是 true?object 是false? 解答这个原因先看几个相关的示例

    原始类型

    基本类型

    • 字符
    isNaN('12')    // Number('12') > 12  -> false
    isNaN('12,23')   // ==>Number('12, 23') -> 12,23  -> true
    
    • 数字
    isNaN(12)    // Number(12) > 12  -> false
    

    引用类型

    • 对象
    let o = {}
    isNaN(o)   // ==> true
    
    o.toString()   // ==> "[object Object]", Number("[object Object]") ==> true
    
    • 数组
    let arr = [12, 23]
    isNaN(arr)    // ==> true
    
    arr.toString()   // ==> "12, 23", 所以 Number("12, 23") ==> true
    
    • data
    isNaN(new Date());                // false
    isNaN(new Date().toString());     // true
    

    解释上面问题

    • null
    isNaN(null) // false, 因为 Number(null) ==> 0
    
    • undefined
    isNaN(undefined) // true。因为 Number(undefined) ==> NaN
    
    • 引用类型
    isNaN('') // false,因为 Number('') -> 0。
    //同理:
    isNaN([]) // false,因为 [].toString() ->'' ,Number('') -> 0
    isNaN([12, 23]) // true 因为[12, 23].toString()->"[object Object]", Number("[object Object]") ==> true
    

    总结:isNaN() 使用分两种情况

    • 引用数据类型 object, 先通过 toString 方法转化成字符串,再通过 Number 方法转化成数字类型
    • 其他基本类型 直接使用 Number 方法转化成数字类型

    思考,怎么判断一个数是否为有效数字?

    • 这样吗?
        if(isNaN(param) == NaN){
            console.log('不是有效数字')
        }
    

    明显上面的写法是错误的,因为 NaN == NaN 也是不相等的,所以上面代码永远不会执行

    • 正确使用方法
            if(isNaN(param)){
            console.log('不是有效数字')
        }
    

    文章地址:
    掘金
    博客地址 体验效果更好。
    源码地址 欢迎start (issue),以后会不断的更新内容

    相关文章

      网友评论

        本文标题:JS扫盲:你不知道的isNaN()

        本文链接:https://www.haomeiwen.com/subject/bibqxltx.html