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

2018-12-29  本文已影响17人  楠楠_c811
数值转换的特点

有三个函数可以把非数值转换为数值:
(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,转为整数
上一篇下一篇

猜你喜欢

热点阅读