44

我有以下代码给出标题中描述的警告:

          year: parseInt(dateParts[0]),
               ......................^

任何帮助深表感谢

4

1 回答 1

111

参见手册parseInt;它需要 2 个参数。第二个告诉它您要使用哪个数字基数。这几乎总是10(十进制)。

parseInt(dateParts[0],10)

如果你不指定它,那么它将从数据中推断出来。

如果 radix 未定义或为 0(或不存在),JavaScript 假定如下:

如果输入字符串以“0x”或“0X”开头,则基数为 16(十六进制)并解析字符串的其余部分。

如果输入字符串以“0”开头,则基数为 8(八进制)或 10(十进制)。确切选择哪个基数取决于实现。ECMAScript 5 指定使用 10(十进制),但并非所有浏览器都支持这一点。由于这个原因,在使用 parseInt 时总是指定一个基数。

如果输入字符串以任何其他值开头,则基数为 10(十进制)。

在我写完以上内容几年后,情况发生了变化。现在:

函数 parseInt 的 ECMAScript 5 规范不再允许实现将以 0 字符开头的字符串视为八进制值。截至 2021 年,许多实现都采用了这种行为。

……但您仍然应该使用基数,至少对于浏览器端代码,因为并非所有实现都赶上了。

于 2013-07-16T16:18:05.730 回答