解析允许字符串(如 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 面试官系列