引言
在前端开发中,经常需要将字符串转化成数字。其中一个常用的方法是 parseInt()
函数。然而,在某些情况下,它返回的值可能会出人意料。比如在执行 parseInt(8,3)
和 parseInt(3)
的时候,分别返回了 NaN
和 1
。那么这个结果是怎么来的呢?本文将对此进行详细讲解。
原理
在 JavaScript 中,parseInt()
函数可以将字符串转换为整数。其语法如下:
parseInt(string, radix);
其中,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
。
示例代码
console.log(parseInt(8, 3)); // NaN console.log(parseInt(3)); // 1
总结
本文讲解了在 JavaScript 中使用 parseInt()
函数发生意外结果的原因。通过本文的讲解,读者应该能够更好地理解 parseInt()
函数的使用规则,并避免在实际开发中出现类似的错误。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/9138