详解js中Number()、parseInt()和parseFloat()的区别
本文详细解析JavaScript中Number()、parseInt()和parseFloat()三个类型转换函数的行为差异。重点阐述Number()对布尔值、null、undefined及字符串的严格转换规则;parseInt()的进制解析能力与截断特性;以及parseFloat()处理浮点数时的精度保留与忽略前导零机制。通过对比示例,帮助开发者准确选择适合场景的转换方法,避免常见的类型转换陷阱。
Number()转换规则
一:Number()
若输入值为布尔类型,true会转换为1,false则转换为0。
若输入值本身为数值类型,则直接返回该数值。
若输入值为null,返回0。
若输入值为undefined,返回NaN。
若输入值为字符串:
a. 若字符串仅包含数字,则将其转换为十进制数值,并忽略前导的0。
b. 若字符串符合有效浮点格式(例如“1.1”),则转换为对应的浮点数,同样忽略前导0。
c. 若字符串包含有效的十六进制格式(例如“0xf”),则转换为等值的十进制数值。
d. 若字符串为空,则转换为0。
e. 若字符串包含上述格式以外的字符,则返回NaN。
若输入值为对象,则先调用该对象的valueOf()方法,并依据前述规则转换返回值。若转换结果为NaN,则进一步调用toString()方法,再依据前述规则转换返回的字符串值。
例:
var num1 = Number("Hello world"); //NaN
var num2 = Number(""); //0
var num3 = Number("0000011"); //11
parseInt()进制解析
二:parseInt()
在处理整数转换时,parseInt()更为常用。该函数在解析字符串时会忽略前导空格,直到找到第一个非空格字符为止。
如果第一个字符不是数字或负号,parseInt()将返回NaN;同样地,使用parseInt()转换空字符串也会返回NaN。
如果第一个字符是数字,parseInt()会继续解析后续字符,直到解析完所有后续字符串或遇到一个非数字字符为止。
parseInt()方法还支持基模式,可将二进制、八进制、十六进制或其他任意进制的字符串转换为整数。
基数由parseInt()方法的第二个参数指定,因此要解析十六进制值,当然,对二进制、八进制,甚至十进制(默认模式),都可以这样调用parseInt()方法。
例:
var num1 = parseInt("AF",16); //175
var num2 = parseInt("AF"); //NaN
var num3 = parseInt("10",2); //2 (按照二进制解析)
var num4 = parseInt("sdasdad"); //NaN
parseFloat()浮点处理
三:parseFloat()
与parseInt()函数类似,parseFloat()也是从第一个字符(位置0)开始解析每一个字符。也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。
也就是说,字符串中第一个小数点是有效的,而第二个小数点就是无效的了,它后面的字符串将被忽略。
parseFloat()只解析十进制,因此它没有第二个参数指定基数的用法
如果字符串中包含的是一个可解析为正数的数(没有小数点,或者小数点后都是零),parseFloat()会返回整数。
例:
var num1 = parseFloat("123AF"); //123
var num2 = parseFloat("0xA"); //0
var num3 = parseFloat("22.5"); //22.5
var num4 = parseFloat("22.3.56"); //22.3
var num5 = parseFloat("0908.5"); //908.5
parseInt()和parseFloat()的区别在于:
- parseFloat()所解析的字符串中第一个小数点是有效的,而parseInt()遇到小数点会停止解析,因为小数点并不是有效的数字字符。
- parseFloat()始终会忽略前导的零,十六进制格式的字符串始终会被转换成0,而parseInt()第二个参数可以设置基数,按照这个基数的进制来转换。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持本站!
JavaScript异步发送HTTP请求时怎么优雅地处理错误
2026-11-05 17:10:44
5款主流JS在线运行工具对比:CodePen、JSFiddle与StackBlitz怎么选
2026-11-05 17:04:04
JavaScript入门书籍避坑:这些书不适合初学者
2026-11-05 16:31:15
JS使用Math.round实现保留两位小数的原理与代码
2026-11-05 15:35:55
JavaScript 原生 Date 对象怎么实现日期加减
2026-11-05 14:30:00
