我在传递一个参数时遇到了一个麻烦的JavaScript错误,但是当它被收到时,它就完全不同了。我修好了,但想知道发生了什么事以供将来参考。
作为参数我应该传递的是'0616'(带引号)。我实际通过的是0616(没有引号)。
所以,当它被收到时,发生了某种隐式数字转换,它被收到为398.我理解隐式和显式转换,但是发生了什么事情将0616转变为398.领先的零似乎有某种东西因为我通过的其他值在最重要的数字中非零是幸存的。只有从零开始的那些?
但398和'0616之间有什么关系?
有什么想法吗?
答案 0 :(得分:5)
啊,javascript的神奇世界!!
任何以0开头的数字文字都被视为八进制数。
一个hacky解决方法是
parseInt('0616', 10)
答案 1 :(得分:3)
0616
是旧的八进制数字格式。在新规范中,它应该是0o616
,但浏览器仍支持旧格式。
请参阅此wiki page:
前缀0o被引入....并且旨在由ECMAScript 6支持(在ECMAScript 3中不鼓励前缀0并在ECMAScript 5中删除)。
答案 2 :(得分:2)
原因是前导零是基本八进制的javascript表示法,例如010 = 8.十六进制的符号是前导0x,例如0x10 = 16