Fork me on GitHub

JSLint Error Explanations

JSLint will hurt your feelings. It's time to make them better!


Missing radix parameter

什么时候会产生这个错误?

当JSLint与JSHint发现调用parseInt函数时只有一个参数,就会抛出"Missing radix parameter"的错误,请看以下例子:

为什么会产生这个错误?

这个错误是为了强调潜在的、会引发问题的错误parseInt函数的第二个参数用来声明一个基数。如果没有声明基数,函数会返回令人感到惊奇的结果。

如果没有声明基数,并且字符串是以0开头,这个字符串就会当做一个8进制数字(以8为基数)。如,parseInt("010");会返回8,而不是10。这个行为在ECMAScript 3中是被允许的。但是,ECMAScript 5中是这么描述的:

parseInt函数会根据string的内容以及指定的radix解析产生一个整数值。导致字符串中的空格被忽略。如果radix没有定义或者为0, 那么基数就会被假定为10,除非数字以0x或者0X开头,也就是将数字假定为16进制。

因此在ECMAScript 5中,这个关于parseInt的怪癖被扔掉了。但是,考虑到你需要让你的代码在老一点的、不支持ES5的环境中成功运行,你还是需要传递一个基数参数给parseInt函数。

JSLint与JSHint的一点小小的疏忽

值得一提的是,不管是JSLint还是JSHint都不会去检查第二个参数的类型。它们只会检查第一个参数。因此,以下代码不会产生任何错误,尽管它表现的和你不传递任何基数一模一样。这也是在使用parseInt函数时的值得警惕的地方:

在JSHint 1.0.0及以上版本中你可以通过特定的选项语法来忽略这个警告。这个警告的标识符是W065,也就是说你可以通过/*jshint -W065*/让JSHint不提示这个问题。


comments powered by Disqus