关于isNAN()函数内进行的莫名其妙的隐式转换?!

 isNaN(X) 函数用于检查其参数是否是非数字值。

  如果 x 是特殊的非数字值 NaN(或者能被转换为这样的值 )返回的值就是 true。如果 x 是其他值,则返回 false。

  首先,我们先来了解一下什么是NAN,NAN即note a number,NaN 属性用于引用特殊的非数字值。而isNaN() 函数通常用于检测 parseFloat() 和 parseInt() 的结果,以判断它们表示的是否是合法的数字。当然也可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况。

  但是在实际的工作中,使用isNAN()方法会出现一些难以解释的现象,那是因为该方法运行中进行了“隐式转换”,下面列出了一些案例;

 

isNaN(NaN); // true

isNaN(undefined); // true

isNaN({}); // true

isNaN(true);// false

isNaN(null); // false

isNaN(37); // false

// strings

isNaN("37"); // false: "37"、 “37”将转换为一个数字37,所以不是一个NAN;

isNaN("37.37"); // false: "37.37" 将被转换为 37.37 ,所以不是一个 NaN

isNaN("123ABC"); // true: 字符串“123ABC”parseInt("123ABC") 方法后为 123,但是这里是使用Number()方法, Number("123ABC")得到的结果为 NaN

isNaN(""); // false: 空字符串将被转换为数字0,它不是一个NAN,所以为false

isNaN(" "); // false: 一个空格的字符串被转换为数字0,0不是一个NAN,所以为false

// dates

isNaN(new Date()); // false

isNaN(new Date().toString()); // true // 这里使用了toString()方法转为字符串,所以非常肯定的得出它是一个NAN;

isNaN("blabla") // true: 字符串"blabla" 将被转换为一个number. // 解析为数字失败并返回NaN

   从上面的案例可以看出,isNAN()方法括号内的内容如果是字符串数据类型,或者布尔类型,将会使用Number()方法转换数字类型,如果转换后为NAN则返回true,反之则返回false;

转载于:https://www.cnblogs.com/dreamworker6/p/7382131.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值