sav*_*ger 116 javascript
Javascript的parseInt函数似乎没有完全奏效.
parseInt("01") returns 1
parseInt("02") returns 2
parseInt("03") returns 3
parseInt("04") returns 4
parseInt("05") returns 5
parseInt("06") returns 6
parseInt("07") returns 7
parseInt("08") returns 0
parseInt("09") returns 0
Run Code Online (Sandbox Code Playgroud)
你无法解释.试试看.(的jsfiddle)
Roc*_*mat 178
这是因为如果数字以'0'开头,则将其视为基数8(八进制).
您可以通过将基数作为第二个参数传递来强制基数.
parseInt("09", 10) // 9
Run Code Online (Sandbox Code Playgroud)
根据文档,第二个参数是可选的,但并不总是假设为10,正如您从示例中看到的那样.
Way*_*ett 39
调用parseInt
应始终在第二个参数中指定基数:
parseInt("08", 10);
Run Code Online (Sandbox Code Playgroud)
早期版本的JavaScript处理0
以八进制开头的字符串(当没有指定基数时),08
也不09
是有效的八进制数.
从Mozilla 文档:
如果radix未定义或为0,则JavaScript假定以下内容:
- 如果输入字符串以"0x"或"0X"开头,则基数为16(十六进制).
- 如果输入字符串以"0"开头,则基数为8(八进制).此功能是非标准的,有些实现故意不支持它(而是使用基数10).因此,在使用parseInt时始终指定基数.
- 如果输入字符串以任何其他值开头,则基数为10(十进制).
如果第一个字符无法转换为数字,则parseInt返回NaN.
从ECMAScript 3标准:
当radix为0或未定义且字符串的数字以0 开头后跟x或X开头时,实现可以自行决定将数字解释为八进制或十进制.鼓励实现将这种情况下的数字解释为十进制.
最新版本的JavaScript(ECMAScript 5)放弃了这种行为,但您仍应指定基数以满足旧版浏览器的要求.
Joh*_*ock 15
有一个Radix参数
parseInt(value, base)
Run Code Online (Sandbox Code Playgroud)
基数是基数.
在这种情况下,您正在评估base10(十进制)数字,因此使用
parseInt(value, 10);
Run Code Online (Sandbox Code Playgroud)