为什么2 + 10 = 12
和2 + 010 = 10
?我在 Google Chrome v 51.0 和 IE 8 的控制台上尝试了此操作,只是为了获得相同的结果。也许这是Javascript的特色
有人请帮助我理解它背后的逻辑以及它可以提供什么样的好处?
答案 0 :(得分:3)
它不是二进制,开头的0使它成为八进制,而八进制010 == 8
答案 1 :(得分:2)
0
在一个数字告诉javascript将数字解释为八进制之前。因此,八进制中的10
表示十进制8
,8 + 2
为10
。
答案 2 :(得分:2)
前导0的数字被视为八进制数。这就是为什么010被解释为8因此你得到10为 2 + 010 的总和。这也发生在python上。
答案 3 :(得分:2)
有时JavaScript会根据您指定的数字完全处理数字,有时则会尝试解释'数字。
在这种情况下,JavaScript正在解释数字。
前导零表示该数字为八进制 - 基数为8 - 其中数字为0,1,2,3,4,5,6,7。
所以.. 010(八进制)== 8(十进制)
2 + 010
2 + 8
10
如果您要处理外部来源的号码,可以使用parseInt
2 + parseInt("010", 10);
注意:,10
对于强制将该数字转换为基数10也很重要。在ES3(我相信5)中,如果没有它,您可能会得到不同的结果,具体取决于浏览器。
答案 4 :(得分:1)
10
等于八进制中的8
,第一个零告诉javascript将其解释为八进制数。因此,当执行2 + 010
时,首先010
会被翻译为8
,然后会将其添加到2
以提供10
。