解析允许字符串(如 parseInt() )中含有非数字字符,解析按从左到右的顺序,如果遇到非数字字符就停止。而转换(如 Number ())不允许出现非数字字符,否则会失败并返回 NaN。
补充
补充:
parseInt/parseFloat与Number/+强制转换的核心区别在于"对非数字字符的容忍度"以及"解析规则":
parseInt(str, radix):从左到右扫描,碰到第一个不能解析为指定进制数字的字符就停下,已解析部分作为结果返回;忽略前后空白;接受第二个参数指定进制。parseFloat类似但不接受进制参数。Number(str):整体转换,要求字符串是合法的数字字面量(允许前后空白、十六进制 / 科学计数法),任意非法字符都会返回NaN。- 一元运算符
+str等价于Number(str)。
parseInt('123abc') // 123(解析到 'a' 停下)
parseInt(' 42 ') // 42
Number('123abc') // NaN
Number(' 42 ') // 42
+ '123abc' // NaN
+ '42' // 42
parseInt('0x10') // 16(按十六进制解析,radix 缺省时按 0 自动推断)
Number('0x10') // 16
parseInt('10.9') // 10
Number('10.9') // 10.9
来源整理自:vue3js.cn 面试官系列



