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

作者 : 开心源码 本文共1382个字,预计阅读时间需要4分钟 发布时间: 2022-05-13 共243人阅读

类型分类

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

原始类型

number

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

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

基本示例:

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

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

原始类型

基本类型

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

引用类型

  • 对象
let o = {}isNaN(o)   // ==> trueo.toString()   // ==> "[object Object]", Number("[object Object]") ==> true
  • 数组
let arr = [12, 23]isNaN(arr)    // ==> truearr.toString()   // ==> "12, 23", 所以 Number("12, 23") ==> true
  • data
isNaN(new Date());                // falseisNaN(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('') -> 0isNaN([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),以后会不断的升级内容

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » JS扫盲:你不知道的isNaN()

发表回复