• javascript的非数值转换为数值和NaN


    javascript有3个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat()。

    =================================================================

    Number()可以用于任何数据类型(此函数平时很少使用)。

    parseInt()、parseFloat()专门用于把字符串转换成数值(比较常用的哦)。

    =================================================================

    虽然Number()不常用,但是我们还是要说下它的转换规则:

    【1】如果是Boolean值,true和false将分别被转换为1和0。

    【2】如果是数字值,只是简单的传入和返回。

    【3】如果是null值,返回0。

    【4】如果是undefined,返回NaN。

    【5】如果是字符串,遵循下列规则:

          1)、如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转化为十进制数值,既"1"变成1,"123"变成123,但是"012"会变成11(注意:前导的零被忽略了);

          2)、如果字符串中包含有效的浮点格式,如"1.1",将其转换为对应的浮点数值(同样也会忽略前导零);

          3)、如果字符串中包含有效的十六进制格式,如"0xf"则将其转换为相同大小的十进制整数值;

          4)、如果字符串是空的(不包含任何字符),则将其转换为0;

          5)、如果字符串中包含除上述格式之外的字符,则将其转换为NaN;

    【6】如果是对象,则调用对象的valueOf方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值。

    说了这么多,大家看下例子吧:

    var num1 = Number("Hello world");      //NaN
    var num2 = Number("");                 //0
    var num3 = Number("000011");           //11
    var num4 = Number(true);               //1

     由于Number()函数在转换字符串时比较复杂而且不够合理,因此在处理函数的时候更常用parseInt()函数。

    ===================================================================================

    【1】parseInt():从字符串中提取整数,遇到非数字,就停止,不在看后面的。

    【2】parseInt()函数能够识别出各种整数格式(2、8、10、16进制度),默认是10进制。

    如果要转换其他进制,要带上第二个参数:转换时使用的基数(即多少进制),默认10进制可以不带第二个参数。

    【3】parseInt()函数在下面情况会提示NaN:

                  1)、第一个字符不是数字字符或者负号;

                  2)、转换空字符串

    下面来看点示例:

    var num1 = parseInt("22.5");               //22
    var num2 = parseInt("1234blue");           //1234
    var num3 = parseInt("blue1234");           //NaN
    var num4 = parseInt("");                   //NaN
    
    
    var num5 = parseInt("AF", 16);             //175(指定了16作为第二参数,字符串可以不带前面的"0x")
    
    
    var num6 = parseInt("10", 2);              //2(按二进制解析)
    var num7 = parseInt("10", 8);              //8(按八进制解析)
    var num8 = parseInt("10", 10);             //10(按十进制解析)
    var num9 = parseInt("10", 16);             //16(按十六进制解析)

    由于parseInt()函数可以解析很多进制,为了避免错误解析,我们建议无论在什么情况下都要指定基数。

    ===============================================================================

    【1】parseFloat():提取第一个浮点数,即小数。也可以理解为,字符串中的第一个小数点有效,第二个小数点无效,因此它后面的字符串将被忽略。

    举个例子:"22.34.5"会被转换为22.34。

    【2】parseFloat()转换规则:

                          1)、只解析十进制值,没有第二参数指定基数的用法。

                          2)、与parseInt()有区别,parseFloat()会始终忽略前导的零。

                          3)、可以十八前面讨论的所有浮点数值格式,也包括十进制整数格式,但十六进制格式的字符串则始终会被转换成0。

                          4)、如果字符串包含的是一个可解析为整数的数(没有小数点,或是小数点后面都是零),则返回整数。

    下面看下示例:

    var num1 = parseFloat("22.5");               //22.5
    var num2 = parseFloat("22.34.5.6");          //22.34
    var num3 = parseFloat("1234blue");           //1234
    var num4 = parseFloat("0xA");                //0(十六进制)
    var num5 = parseFloat("0908.5");             //908.5(忽略前导零)
    var num6 = parseFloat("3.125e7");            //31250000(没有小数点,或者小数点后面都是零)

    ==============================================================================

    【1】上面提到了NaN,那什么的NaN?

    答:不是数值(非数值),字面全拼为:Not a Number

    【2】NaN的作用是什么???

    答:用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。

    【3】NaN的特性是什么???

    答:1)、任何涉及NaN的操作(例如NaN/10)都会返回NaN,这个特点在多步计算中有可能导致问题。

         2)、NaN与任何值都不相等,包括NaN本身

         3)、在ECMAScript中,任何数值除以0都会返回NaN,因此不会影响其他代码的执行。(这里有一点要指出,任何数值除以0都会返回NaN,这是原书的说法,但实际上只有0除以0才回返回NaN,正数除以0返回Infinity,负数除以0返回-Infinity)

    下面看一个例子:

    alert(NaN == NaN);      //false

    【4】什么是isNaN()函数???

    答:这个函数接受一个参数,该参数可以是任何类型,而函数会帮我们确定这个参数是否“不是数值(NaN)”。

    【4】isNaN()函数的特点是什么???

    答:1)、在接收到一个值后,会尝试将这个值转换为数值。

         2)、某些不是数值的值会直接转换为数值,例如字符串"10"或是Boolean值

         3)、任何不能被转换为数值的值都会导致这个函数返回true。

         4)、也适用于对象,在使用时会首先调用对象的valueOf()方法,然后在确定该方法返回的值是否可以转换为数值,如果不能,则基于这个返回值在调用toString()方法,再测试返回值。

    下面看下示例:

    alert(isNaN(NaN));             //true
    alert(isNaN(10));              //false(10是一个数值)
    alert(isNaN("10"));            //false(可以被转换成数值10)
    alert(isNaN("blue"));          //true(不能转换成数值)
    alert(isNaN(true));            //false(可以被转换成数值1)
  • 相关阅读:
    Kill Processes in Linux
    How to Setup Chroot SFTP in Linux (Allow Only SFTP, not SSH)
    156 Useful Run Commands
    6
    pandas groupby合并列字符串
    一个ROS配置的脚本
    Mybatis 学习记录
    Android搭建code server
    CF 1616D. Keep the Average High
    第七章:(1)Redis 的发布订阅
  • 原文地址:https://www.cnblogs.com/huige728/p/3085226.html
Copyright © 2020-2023  润新知