为什么parseInt('dsff66',16)返回13?

14 浏览
0 Comments

为什么parseInt('dsff66',16)返回13?

今天在JavaScript中,我偶然遇到一个奇怪的(我认为是奇怪的)情况。我将一个非十六进制的字符串传递给parseInt函数,并指定基数为16,但是...我得到了结果。

我本来期望这个函数会抛出某种异常,或者至少返回NaN,但是它成功解析了字符串,并返回了一个整数。

我的调用是:

var parsed = parseInt('dsff66', 16); // 注意第一个参数中的's'
document.write(parsed);

结果是:13

我注意到它会在第一个不属于第二个参数指定的数字系统的字符处“停止”解析,所以调用parseInt('fg',16)会得到15作为结果。

在我看来,它应该返回NaN。有人能解释为什么它不会返回NaN吗?为什么有人希望这个函数表现出这样的行为(即使它不是字符串的精确表示,也返回一个整数)?

0