Javascript 为什么0154==108?

Javascript 为什么0154==108?,javascript,html,Javascript,Html,发生了什么,为什么 0154是八进制。 1*64+5*8+4=108。以0开头的数字被视为八进制(以8为基数)数字 基数8[0154]=基数10[108] 但是如果你使用了一个8或9的数字,你就不会看到这个问题,因为8或9都不是八进制数字。它打印出的是与你所写的八进制相等的数字,因为它以0开头。尝试 0001(打印出1)、0010(打印出8)、0011(打印出9)其八进制数。 八进制=0154&十进制=108哇,真不敢相信我竟然没有想到这一点。谢谢你的解释!发明这种行为的人应该远离任何计算机。@

发生了什么,为什么

0154是八进制。
1*64+5*8+4=108。

以0开头的数字被视为八进制(以8为基数)数字

基数8[0154]=基数10[108]


但是如果你使用了一个8或9的数字,你就不会看到这个问题,因为8或9都不是八进制数字。

它打印出的是与你所写的八进制相等的数字,因为它以0开头。尝试 0001(打印出1)、0010(打印出8)、0011(打印出9)

其八进制数。
八进制=0154&十进制=108

哇,真不敢相信我竟然没有想到这一点。谢谢你的解释!发明这种行为的人应该远离任何计算机。@GolezTrol为什么?在许多不同的环境中,这是一个被广泛接受的结构:)@pst:因为Javascript中这种行为的唯一实际效果是导致编程错误。它被广泛接受是因为有人在1872年的一个喝醉的星期天下午发明了它,现在没有人记得它,但在很多环境中,前导零被忽略。0o前缀或某些东西更有意义,因为您可以立即看到该数字的某些特殊之处,即使您仍然需要查找该“o”代表什么。您还可以将其设置为十六进制:
document.write(0x154)并查看您得到了什么。:-)只要把
“严格使用”位于文件/函数的顶部。
document.write(0154); // === 108