Wierd Javascript的添加行为

时间:2016-06-17 17:39:48

标签: javascript google-chrome internet-explorer binary console

为什么2 + 10 = 122 + 010 = 10?我在 Google Chrome v 51.0 IE 8 的控制台上尝试了此操作,只是为了获得相同的结果。也许这是Javascript的特色  有人请帮助我理解它背后的逻辑以及它可以提供什么样的好处?

5 个答案:

答案 0 :(得分:3)

它不是二进制,开头的0使它成为八进制,而八进制010 == 8

https://en.wikipedia.org/wiki/Octal

答案 1 :(得分:2)

0在一个数字告诉javascript将数字解释为八进制之前。因此,八进制中的10表示十进制88 + 210

答案 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