js中转数字的方法有哪些?我经常会用字符串*1,但是如果碰到一些特殊的情况,使用这种方式会带来不必要的麻烦。下面看一下js提供的3种常见的转数字的方法。
一、 Number()
1.数字正常转换,可处理十进制,二进制,八进制和十六进制。
Number(0000012323) //5331
Number(0xf) //15
Number(001) //1
Number(1.1) //1.1
Number(0.11) //0.11 浮点数也正常转换
Number(00.11) //报错
2.布尔值;其他类型
Number(false) //0
Number(true) //1
Number() // 0 //空返回0
Number('') //0
Number(null) //0
Number(undefined) //NaN
3.字符串
Number('0xf') //15 //1.十六进制格式,如“0xf”,将其转换为相同大小的十进制数值
Number('0000012323') //12323 //2.前导0会被忽略
Number('0.11') //0.11
Number('00.11') //0.11 //3.浮点数会正常转换,并忽略前导0
Number('1b1')//NaN//4.其他情况字符串都返回NaN
4.对象:会先调用valueOf()和toString()方法
Number({a:1}) //NaN === Number('[object Object]')
Number([1]) //1 ===Number('1')
Number([1,2]) //NaN === Number('1,2')
二、parseInt(num,type)
parseInt有2个参数,第二个参数表示转换数字想要的进制。进行转换时会取整。
1.数字转换,将浮点数转成整数
parseInt(10);
parseInt(10.1) //10
parseInt(10.1,2) //2
parseInt(0.23) //0
parseInt(10.111.1,10) //报错:missing ) after argument list
parseInt(0010.111,10) //报错:missing ) after argument list
2.布尔值;其他类型
parseInt(false) //NaN
parseInt(null) // NaN
parseInt(undefined) //NaN
parseInt() //NaN
parseInt('') //NaN
3.字符串:字符串开头如果不是正、负、数字返回NaN;遇到非数字或结尾停止解析
parseInt('-1') //-1
parseInt('+1') //1
parseInt('a1') //NaN
parseInt('12a') //12
parseInt('12,a') //12
parseInt('012,a') //12
parseInt('0.12,a') //0
parseInt('0000.12,a') //0
4.对象:会先调用valueOf()和toString()方法,然后按字符串处理
parseInt({a:1}) // NaN === parseInt('[object Object]')
parseInt([1,1.2],2) // 1 === parseInt('1,1.2',2)
parseInt([10,1.2],2) //2 === parseInt('10,1.2',2)
三、parseFloat()
与parseInt() 函数类似,parseFloat() 也是从第一个字符(位置0)开始解析每一个字符。也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。
parseFloat() 只解析十进制,因此它没有第二个参数指定基数的用法
1.数字
parseFloat(0.2222) //0.2222
parseInt(0xf,10) //15
2.布尔;其他类型
parseFloat() //NaN
parseFloat('') //NaN
parseFloat(false) //NaN
parseFloat(null) //NaN
parseFloat(undefined)//NaN
3.字符串
parseFloat('00.123') //0.123
parseFloat('00.123aa') //0.123 //只会取到非数字前一位
parseFloat('-0.123aa') //-0.123
parseFloat('-123.1.3') //-123.1//遇到第二个小数点当非数字处理
parseFloat('-1.0') //-1小数点后为0时返回整数
4.对象:同上
parseFloat([1.33,1.2]) //1.33
parseFloat({a:1}) //NaN
四、区别
Number()、parseInt()、parseFloat()区别总结起来就是:
1.参数上:Number()、parseFloat都只有一个数据源参数;()parseInt()多一个进制处理的参数。
2.处理浮点数:parseInt()会取整;Number()、parseFloat()不会。
3.处理机制:Number处理数据时发现非数字(不包括正、负号)就会返回NaN;parseInt只要在数据开头发现数字就不会返回NaN。