zoukankan      html  css  js  c++  java
  • 关于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;

  • 相关阅读:
    iOS中网络请求判断是否设置代理
    swif开发笔记12-Animations
    swift开发笔记11
    swift开发笔记06
    Idea热部署jrebel失败
    Oracle连接知识
    Idea安装及其简介
    博客园cnblog发布word
    en笔记音标
    测试案例小问题
  • 原文地址:https://www.cnblogs.com/dreamworker6/p/7382131.html
Copyright © 2011-2022 走看看