js中共有三个函数用于将其他数据类型转换为数值类型,分别是Number(),parseInt()和parseFloat().
其中 Number() 可以用于任意数据类型,后两者主要用于将字符串转换为数值类型。
Number() 的转换规则:
1.布尔值,true转换为1,false转换为0
console.log(Number(true));// 1
console.log(Number(false));// 0
2.数值,直接返回
console.log(Number(123));// 123
3.null,返回 0
console.log(Number(null));// 0
4.undefined,返回NaN
console.log(Number(undefined));// NaN
5.字符串:
1)若为数值字符串(包含加减号的情况),直接返回数值,若数值前面为0,忽略后返回数值。
console.log(Number('123'));// 123
console.log(Number('+123'));// 123
console.log(Number('-123'));// -123
console.log(Number('00123'));// 123
2)若除包含数值字符串外还包含其他字符串,返回NaN
console.log(Number('123和其他字符串'));// NaN
3)若为浮点值字符串(包含加减号的情况),同样直接返回数值(同样忽略前面的0)
console.log(Number('1.1'));// 1.1
console.log(Number('01.1'));// 1.1
4)若为16进制的数值字符串,会转换为十进制后输出
console.log(Number('0xAF'));// 175
5)若为空字符串,返回0
console.log(Number(''));// 0
parseInt()转换规则:
parseInt()会从第一个非空格字符开始检测,直到遇到非数值字符或到字符串末尾,例如‘123blue’会返回123,后面剩余字符将自动忽略,类似的像 ‘22.4’ 会返回22,因为小数点不是有效的整数字符。
若第一个字符为非 数值或加减符号 的字符会立即返回NaN,这意味着空字符串也会返回NaN.
console.log(parseInt('123'));// 123
console.log(parseInt(' 123'));// 123
console.log(parseInt('0123'));// 123
console.log(parseInt('+123'));// 123
console.log(parseInt('-123'));// -123
console.log(parseInt('123blue'));// 123
console.log(parseInt('22.4'));// 22
console.log(parseInt(''));// NaN
console.log(parseInt('加123'));// NaN
parseInt()还能识别不同整的数格式(十六进制,八进制,二进制),事实上parseInt()还支持接收第二个参数,用于指定进制数,若不传,将自动判断。
console.log(paserInt('0xAF'));// 175
console.log(parseInt('11',2));// 3
parseFloat()转换规则:
parseFloat与parseInt类似,不同的是,有效字符增加了小数点,但只限于第一次出现的小数点,第二次出现小数点后此时字符串剩余的字符将会全部忽略,例如 ’22.3.1123’ 返回的为22.3
值得一提的是parseFloat只支持十进制解析,所以parseFloat()不能通过传递第二个参数来指定进制数,十六进制的数值会始终返回0
console.log(parseFloat('0xAF'));// 0
console.log(parseFloat('22.3.1123'));// 22.3
console.log(parseFloat('123adf'));// 123