2014-12-04 86 views
3

我在传递一个参数时寻找了一个麻烦的JavaScript错误,但是当它被接收时,它完全不同。我修好了,但想知道未来的参考情况。了解Javascript中的隐式转换

我应该作为参数传递的是'0616'(带引号)。我实际上通过的是0616(没有引号)。

所以,当它被接收时,发生了某种隐式数字转换,它被接收为398.我理解隐式和显式转换,但是将0616转换为398时发生了什么。前导零似乎有与它有关,因为我通过的其他值在最重要的数字中是非零的。只有那些从零开始的?

但398和'0616'之间有什么关系?

任何想法?

+0

http://stackoverflow.com/questions/9071696/javascript-why-treated-as-octal – BatScream 2014-12-04 01:09:45

回答

2

原因在于前导零是基于八进制的javascript符号,例如, 010 = 8。十六进制的记号是前导0x,例如, 0x10 = 16

5

啊啊魔法世界的javascript!

任何以0开头的数字文字都被视为八进制数字。

哈克解决方法是

parseInt('0616', 10) 
+0

对不起,我以前的评论,但我认为'parseInt函数( '0616',10)'会更安全,如果他仍然需要支持一些旧的浏览器,这些浏览器会解释为八进制。 – Leo 2014-12-04 01:30:02

+0

好的电话,我会补充说:) – 2014-12-04 01:31:55

3

0616是旧八进制数格式。在新规格中应该是0o616,但旧格式仍受浏览器支持。

见本wiki page

前缀0O引入....,它是旨在由ECMAScript的支持6(前缀0已经气馁ECMAScript中3和ECMAScript的5下降)。