JavaScript前端开发那些事儿程序员

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

2021-02-09  本文已影响0人  林一一呢

类型分类

原始类型

number

基本概念: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
isNaN(new Date());                // false
isNaN(new Date().toString());     // true

解释上面问题

isNaN(null) // false, 因为 Number(null) ==> 0
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() 使用分两种情况

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

    if(isNaN(param) == NaN){
        console.log('不是有效数字')
    }

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

        if(isNaN(param)){
        console.log('不是有效数字')
    }

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

上一篇 下一篇

猜你喜欢

热点阅读