如果我使用代码:
string = '010';
write = eval(string);
document.write(write)
我在页面上写了8个。为什么? 即使010不是字符串,也会发生这种情况。
答案 0 :(得分:20)
因为010被解析为八进制。 Javascript将前导零视为表示该值在基数8中。
类似地,0x10会给你16,用十六进制解析。
如果要使用指定的基础解析字符串,请使用parseInt:
parseInt('010', 8); // returns 8.
parseInt('010',10); // returns 10.
parseInt('010',16); // returns 16.
答案 1 :(得分:4)
使用0
加上数字意味着它是octal,即基数8.类似于为十六进制数字加前缀0x
(基数为16)。
使用parseInt
的第二个参数来强制基数:
> parseInt('010')
8
> parseInt('010', 10)
10
答案 2 :(得分:1)
如果您想将字符串010
输出到文档,可以将值包装在引号中:
var octal = eval('"010"');
typeof octal; // "string"
如果要解析整数或理解八进制,请阅读其他答案。