Bry*_*gee 3 javascript parsing numbers
我认为它与八进制解析有关,因为它只发生在8或9上.还有人认为这是一个Chrome错误,但它也在Firefox中复制.
这是故意的行为吗?如果是这样,为什么?
jfr*_*d00 12
这里的解决方案很简单.切勿在parseInt()
未指定所需基数的情况下调用.如果未传递第二个参数,请parseInt()
尝试根据数字的格式猜测基数.当猜到时,它经常会出错.
像这样指定基数,你将得到所需的结果:
parseInt("08", 10) == 8;
Run Code Online (Sandbox Code Playgroud)
至于它用于猜测的规则,您可以参考MDN文档页面parseInt()
.
如果radix未定义或为0,则JavaScript假定以下内容:
- 如果输入字符串以"0x"或"0X"开头,则基数为16(十六进制).
- 如果输入字符串以"0"开头,则基数为8(八进制).此功能是非标准的,有些实现故意不支持它(而是使用基数10). 因此,在使用parseInt时始终指定基数.
- 如果输入字符串以任何其他值开头,则基数为10(十进制).如果第一个字符无法转换为数字,则parseInt返回NaN.
因此,根据这些规则,parseInt()
将猜测"08"
是八进制,但它会遇到八进制中不允许的数字,因此它返回0
.
当你传递一个数字时parseInt()
,它无关,因为该值已经是一个数字,因此它不会尝试更改它.
小智 5
"这是故意的行为吗?"
是.
"如果是这样,为什么?"
前导0
是用于表示规范中定义的八进制数的符号.符号8
和9
八进制的编号是不存在的,所以parseInt
使用它找到的第一个有效数字,这就是0
.
如果你这样做......
parseInt('123@xq$_.f(--_!2*')
Run Code Online (Sandbox Code Playgroud)
......结果将是......
123
Run Code Online (Sandbox Code Playgroud)
...因为在字符串的开头找到了有效的数字.任何无效的东西都会被丢弃.
归档时间: |
|
查看次数: |
1696 次 |
最近记录: |