美文网首页
红宝书之数值转换number()、parseInt()、pars

红宝书之数值转换number()、parseInt()、pars

作者: 楠楠_c811 | 来源:发表于2018-12-29 17:20 被阅读17次
    数值转换的特点

    有三个函数可以把非数值转换为数值:
    (1)Number(),可以作用于任何数据类型
    (2)parseInt(),将字符串转为整数
    (3)parseFloat(),将字符串转为浮点数

    number() 转换规则:
    1. 如果是Boolean值,true和false将分别被转换为1和0
      2.如果是数字值,只是简单的传入和返回
      3.如果是null值,返回0
      4.如果是undefined,返回NaN
      5.如果是字符串,遵循一定的规则
    字符串转换为number的规则:

    1.如果字符串中只包含了数字,(包括前面有+-符号的情况),就将其转换为十进制的数值。如“1”转为1,“123”转为123,而“011”会转换为11。因为前置的0会被忽略。
    2.如果字符串中包含有效的浮点数,将会转换为对应的浮点数值,如“0.15”同样会忽略前置0。
    3.如果字符中包含有效的十六进制格式,将其转换为相同大小的十进制整数值,如“0xf”转为15。
    4.空字符串转为0。
    5.如果字符串包含上述格式之外的字符,就转为NaN。
    6.如果是对象,则调用对象的valueOf()方法。再次依照前面的规则转换返回的字符串值。如果转换结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值。

    这些规繁杂难记,依然来举例说明:

           let num1 =  Number('')       // 0 空字符串转为0
           let num2 =  Number('123')    // 123
           let num3 =  Number('true')   // NaN  字符串被转换为NaN,是因为其中不包含任何有意义的数字值
           let num4 =  Number(true)     // 1 布尔值true会被转为1
           let num5 =  Number('false')  // NaN  字符串被转换为NaN,是因为其中不包含任何有意义的数字值
           let num6 =  Number(false)    // 0 布尔值false会被转为0
           let num7 =  Number('0000012')  // 12  前置的0会被忽略
           let num8 =  Number('Hello')    // NaN  字符串被转换为NaN,是因为其中不包含任何有意义的数字值
           let num9 =  Number(null)       // 0 如果是null转为0
           let num10 =  Number(undefined) // NaN  如果是undefined转为NaN
           let num11 =  Number("000.150") // 0.15  转为对应的浮点数, 忽略前置0
           let num12 =  Number("0xf")     // 15 十六进制转为十进制整数值
           let num13 =  Number({})       // NaN
    

    因为Number()函数在转换字符串是复杂而且不合理,所以在处理整数的时候常用parseInt() 函数。

    parseInt()转换字符串的规则

    1.忽略前面的空格,直到找到第一个非空格字符;
    2.如果第一个字符不是数字或负号,会返回NaN,所以空字符串会返回NaN,Number()是返回0;
    3.如果第一个字符是数字字符,会继续解析第二个字符,直到解析完毕,或者遇到一个非数字字符;如“123red”会被转换为123,非字符会被完全忽略,“22.22”会被转换为22,因为 . 不是一个有效的数字字符。
    4.可以将八进制,十六进制转换为十进制。

            let s = parseInt('    e123');    // NaN 忽略空格找到第一个非空格字符,如果不是负号和数字,就返回NaN.
            let s1 = parseInt('    -e123');  // NaN 第一个字符是负号,第二个字符不是数字,返回NaN
            let s2 = parseInt('    -123');  // -123 忽略空格,返回数值
            let s3 = parseInt('    -1  23');  // -1 遇到空格就不继续
            let s4 = parseInt('    -1e23');   // -1 遇到非空格非数字不继续
            let s5 = parseInt('');     // NaN 空字符串返回NaN
            let s6 = parseInt('0e1');  // 0 遇到非数字不继续
            let s7 = parseInt('    -123e');  // -123 忽略空格,遇到非数字不继续
            let s8 = parseInt('101');  // 101 解析数字
            let s9 = parseInt('abc123');  // NaN 非空格非数字返回NaN
            let s10 = parseInt('11.1');  // 11 小数点 不是有效是数字字符
            let s11 = parseInt('070');  // 70 忽略前置0解析数字
            let s12 = parseInt('0xf');  // 15  十六进制转换为十进制整数
    
    parseFloat()转换规则

    1.也是从第一个字符开始解析;
    2.一直解析到字符串末尾,或直到遇到一个无效的浮点数字符,如第一个小数点是有效的,第二个是无效的;
    3.十六进制格式的字符串会被转换为0;
    4.始终会忽略前置0;
    5.直解析十进制;
    6.如果小数点后面是0或者没有小数点,会返回整数。

            let s1 = parseFloat('1234blue')  // 1234 直接忽略blue转为整数
            let s2 = parseFloat('0xA')   // 0 只解析十进制,其他进制全都返回0
            let s3 = parseFloat('22.5')  //22.5 转换为数值
            let s4 = parseFloat('22.54.25')  //22.54 只保留一个小数点
            let s5 = parseFloat('0908.32')  //908.32 忽略前置0
            let s6 = parseFloat('3.125e8')  //312500000 识别e
            let s7 = parseFloat('45.0')   //45 没有小数点或者小数点后面为0,转为整数
    

    相关文章

      网友评论

          本文标题:红宝书之数值转换number()、parseInt()、pars

          本文链接:https://www.haomeiwen.com/subject/plqplqtx.html