• 关于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;

  • 相关阅读:
    UVa 128 Software CRC
    UVa 11258 String Partition(简单DP)
    POJ 3070 Fibonacci(矩阵乘法logN)
    UVa 10280 Old Wine Into New Bottles(剪枝+完全背包)
    图论笔记第四章 欧拉图与哈密尔顿图(beta.)考点
    图。。珍藏season
    图论及其应用哈密尔顿图(alpha)
    9.保健…todo
    android 移植笔记有感
    unp_exam_要点.doc
  • 原文地址:https://www.cnblogs.com/dreamworker6/p/7382131.html
Copyright © 2020-2023  润新知