在javascript中:为什么parseInt(“08”)的值为零,而parseInt(08)的值却很好
In javascript: why does parseInt("08") evaluate to zero, but parseInt(08) evaluate fine?
可能重复:
JavaScript parseInt八进制错误的解决方法
我认为这与八进制解析有关,因为它只发生在8或9上。也有人认为这是Chrome的一个bug,但它也在Firefox中复制。
这是故意的行为吗?如果是,为什么?
这里的解决方案很简单。在未指定所需基数的情况下,切勿调用parseInt()
。当您不传递第二个参数时,parseInt()
会尝试根据数字的格式来猜测基数是多少。当它进行猜测时,往往会出错。
指定这样的基数,你会得到想要的结果:
parseInt("08", 10) == 8;
至于它使用什么规则进行猜测,可以参考parseInt()
的MDN文档页面。
如果基数未定义或为0,JavaScript将假定以下内容:
- 如果输入字符串以"0x"或"0x"开头,则基数为16(十六进制)
- 如果输入字符串以"0"开头,则基数为8(八进制)。此功能是非标准的,并且某些实现故意不支持它(而是使用基数10)为此reason在使用parseInt时总是指定基数
- 如果输入字符串以任何其他值开头,基数为10(十进制)。如果第一个字符无法转换为数字,parseInt返回NaN
因此,根据这些规则,parseInt()
将猜测"08"
是八进制,但随后它遇到了一个八进制中不允许的数字,因此它返回0
。
当你把一个数字传递给parseInt()
时,它没有任何作用,因为这个值已经是一个数字了,所以它不会试图改变它
"这是故意行为吗?"
是的。
"如果是,为什么?"
前导0
是用于表示规范中定义的八进制数的符号。符号8
和9
不存在于八进制编号中,因此parseInt
使用它找到的第一个有效数字,即0
。
如果你这样做…
parseInt('123@xq$_.f(--_!2*')
结果将是…
123
因为在字符串的开头找到了一个有效的数字。任何超出该范围的无效内容都将被丢弃。
您可以这样修复:
parseInt("080".replace(/^[0]+/g,""));
相关文章:
- 我如何才能让CasperJS和PhantomJS在约塞米蒂玩得很好
- 在Javascript中使用全局变量作为缓存是很好的
- 我在下拉列表中尝试了下一个和前五年的html代码.接下来的5年我都过得很好.我怎样才能拿到之前的5年
- JavaScript中的OOP太令人困惑了,ES6很棒,但没有得到很好的支持,该怎么办
- "此网站似乎使用滚动链接定位效果.这可能不能很好地与异步平移一起工作;
- html5:一个很好的加载方法
- mootools 1.4.2和angular 1.3在ie8中配合得很好
- Javascript是一个很好的日期选择器和时间选择器库
- 使用JavaScript验证用户交互/输入-这是一种很好的方法
- unbind().click(function(){..})是一种很好的做法
- Chrome,Safari在从本地存储读取时挂起,而Firefox很好
- JQuery在Chrome中不起作用,但Firefox很好
- 这是一个很好的例子,显示了 JavaScript 中的 OOP 和过程编程之间的区别
- Javascript表排序工作得很好,但对所有索引进行迭代会得到不同的结果
- 以这种方式使用if/else-if/else是一种很好的做法
- 一个很好的JS库,用于容纳电气原理图
- webpack:在MacOS上很好,在linux上加载程序错误
- wrap() 不能很好地与 after() 一起使用
- 在javascript中:为什么parseInt(“08”)的值为零,而parseInt(08)的值却很好
- 是否有很好的理由不使用位操作符而使用parseInt ?