2018-06-26 (NaN)

2018-06-26  本文已影响0人  Mo_ham_med

NaN

NaN (not a Number) 不是 一个 数字 。

NaN (not a Number) 不是 一个 数字 。

是一个特殊的值,这个数值表示  本来 要 返回数值 的 操作数 未返回数值的情况 (这样就不会抛出错误了)。

比如在其他语言中

任何数值除以 0 都会 导致 错误 而 终止 程序执行。 但是 在 ECMAScript中,会返回出特殊的值,

因此 不会 影响 程序 的执行。

    var box = 0/0;   //  NaN

    var box = 12/0;  //  Infinity

    var box = 12/0*0  // NaN;

可以通过 Number.NaN  得到 NaN 的值, 任何与 NaN 进行 运算 的 结果 均会为 NaN   ,

NaN 与 自身不相等(NaN不与任何值 相等)。

     alert(Number.NaN) // NaN

     alert(NaN + 1)    // NaN

     alert(NaN == NaN) // false

    
isNaN () 函数   ,   用来 判断 这个是不是 NaN, isNaN() 函数 在 接收到 一个值后,会尝试

将这个值 转换成 数值。


alert(isNaN(NaN))  // true 

alert(isNaN(25))   // false  25 是一个数值

alert(isNaN('25')) // false  '25' 是一个字符串数值,可以转换为数值

alert(isNaN('Lee'))// true   'Lee' 是个 字符串 ,  不能 转化 为  数值

alert(isNaN(true)) // false  true 可以 转化成 1



有 三个函数 可以 把 非数值 转换 成 数值 : Number() 、 parseInt() 和 

parseFloat()。  Number()  是 转换型 函数, 可以用于 任何 数据类型,而 另外 两个则,


专门 用于 把 字符串 转换 成  数值。

alert(Number(true))   // 返回 值  1      Boolean 类型的 true 和 false  分别 转换成 1 和 0 

alert(Number(25));    // 25 ,  数值类型直接返回。

alert(Number(null));  // 0  ,   空对象 返回 0 ;

alert(Number(undefined)); // NaN ,   undefined  返回 NaN  如下

    var vmp 
    
    alert(Number(vmp));  //  NaN

    
    //   声明变量  vmp  没有 赋值  , 没有 赋值 就是 默认值,变量未定义之前,默认值是 undefined 
    //   undefined 返回  NaN, 所以, 用 Number() 函数 转化 为 数值,所以是,NaN; 



如果是 字符串 增寻 以下 规则:

1. 只 包含 数值的 字符串, 会直接 转换成  十进制 数值, 如果 包含 前面 有 0,即会 自动 去掉。
    alert(Number('456'));   //   456

    alert(Number('070'));   //   70
    
2. 只包含 浮点数值 的 字符串,会直接 转换 成 浮点数值, 如果 包含前导 和 后导 0 ,即会自动去掉。

    alert(Number('08.50')); // 8.5 


3. 如果 字符串 为 空, 那么 直接 转换 成 0 ;
    alert(Number('')) // NaN

4. 如果 不是 以上 三种 字符串类型, 则 会 返回 NaN。

    alert(Number('lee123')) // NaN


由于 Number() 函数 在 转换 字符串 时 比较 复杂 切 不够合理, 因此 在处理整数的时候,

更常用的是,parseInt()。

    alert(parseInt('456lee'));     // 456 ,  返回 整数 部分。

    alert(parseInt('lee456lee'));  // NaN , 如果 第一个 不是数值, 就会 返回 NaN。

    alert(parseInt('12Lee56Lee')); // 12 ,  从第一个数值 开始取,到 最后 一个连续数值结束。

    alert(parseInt(56.12));        // 56 ,   小数点不是数值, 会被 去掉。

    alert(parseInt(''));           // NaN,    空 返回 NaN

    parseInt()   除了 可以 识别 十进制数,开可以 识别 八进制 和 十六进制。


    alert(parseInt('0xA'));         //10,十六进制

    alert(parseInt('070'));         //56,八进制

    alert(parseInt('0xALee'));  //100,十六进制,Lee被自动过滤  

    
    ECMAScript 为  parseInt()  提供了  第二参数, 用于解决 各种 进制转换。

    alert(parseInt('0xAF'));                     //175,十六进制

    alert(parseInt('AF',16));                 //157,第二参数指定十六进制,可以去掉0x前导

    alert(parseInt('AF'));                      //NaN,这里看作字符串,理所当然NaN

    alert(parseInt('101010101',2));  //314,二进制转换

    alert(parseInt('70',8));                  //56,八进制转换

parseFloat()  是用于   浮点数值的转换, 和 parseInt()  一样, 从 第一位解析到 浮点数值位置。

    alert(parseFloat('123Lee'));     // 123  , 去掉不能 识别的部分。

    alert(parseFloat('0xA'));        // 0   ,   不认识 十六进制 

    alert(parseFloat(123.4.5))   // 123.4    只认识  一个小数点

    alert(parseFloat(0123.400))  //  123.4    去掉 前后导

    alert(parseFLoat('1.234e7'));    //  12340000 ,  把科学计数法 转换成 普通 数值。

    





上一篇下一篇

猜你喜欢

热点阅读