为什么 Number.parseInt('111AAA') 在 JS 中像它应该的那样工作?这种行为背后的原因是什么?



如果我执行parseInt('111AAA'),我们得到输出'111'。在javascript中,为什么parseInt能像MDN文档中提到的那样工作。

parseInt函数将其第一个参数转换为字符串它,并返回一个整数或NaN。如果不是NaN,则返回的值将是第一个参数的十进制整数表示形式,作为指定基数(基数(中的数字。例如,基数为10表示从十进制数字转换,8个八进制,16个十六进制,依此类推。对于10以上的词根,字母表中的字母表示大于9的数字。例如,对于十六进制数字(基数16( ,A到F。

如果parseInt在指定基数,则忽略该基数和所有后续字符返回到该点为止解析的整数值。parseInt截断数字到整数值。允许使用前导空格和尾随空格。

我已经开始学习JS,并且有Java和C的工作背景。如果向它提供字母数字值,它不应该出错吗?这种行为背后的原因是什么?还有其他语言采用这种方式吗?

编辑:@jabaa指出,C中也存在类似的功能https://en.cppreference.com/w/cpp/string/basic_string/stol

顾名思义,parseInt是一个解析器,而不是转换器。当转换器将字符串作为一个整体并试图理解它时,解析器逐个符号地消耗输入符号,并在无法处理的第一个符号处停止。在javascript中,数字的转换器是Number:

console.log(Number('123foo'))
console.log(parseInt('123foo'))

在C中,atoistrtol和类似的函数都是解析器,而不是转换器。

最新更新