为什么 parseInt(8,3) === NaN 和 parseInt(3) === 1?

阅读时长 2 分钟读完

引言

在前端开发中,经常需要将字符串转化成数字。其中一个常用的方法是 parseInt() 函数。然而,在某些情况下,它返回的值可能会出人意料。比如在执行 parseInt(8,3)parseInt(3) 的时候,分别返回了 NaN1。那么这个结果是怎么来的呢?本文将对此进行详细讲解。

原理

在 JavaScript 中,parseInt() 函数可以将字符串转换为整数。其语法如下:

其中,string 是要被转换的字符串,radix 是一个介于 2 和 36 之间的整数,表示 string 中数字的基数。如果省略 radix 参数,则默认为 10。

radix 参数为 0 或者没有指定时,parseInt() 函数会尝试从输入字符串中猜测一个适当的基数。例如,如果输入字符串以 "0x" 开头,就会被解释为十六进制数;如果以 "0" 开头,则被解释为八进制数;否则被解释为十进制数。

string 中有非数字字符时,parseInt() 函数会丢弃这些字符并返回已经解析到的数字。如果 string 中第一个字符不能转换成数字,或者 string 为空字符串,则返回 NaN

回到本文的问题,为什么 parseInt(8,3) 返回 NaN,而 parseInt(3) 返回 1 呢?

首先来看 parseInt(8,3)。由于 radix 参数为 3,因此 parseInt() 函数会将输入字符串中的数字解释为三进制数,而 "8" 这个字符不是三进制数中的有效字符(只有 0、1、2 可以作为三进制数的字符),因此解析失败,返回 NaN

接下来看 parseInt(3)。由于没有指定 radix 参数,默认为 10,因此 parseInt() 函数会把输入字符串解析为十进制数。字符串中只包含一个数字字符 "3",可以成功解析为数字 3,因此返回值为 1

示例代码

总结

本文讲解了在 JavaScript 中使用 parseInt() 函数发生意外结果的原因。通过本文的讲解,读者应该能够更好地理解 parseInt() 函数的使用规则,并避免在实际开发中出现类似的错误。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/9138

纠错
反馈