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