在JavaScript中,eval(010)返回8

时间:2011-07-16 14:48:15

标签: javascript

如果我使用代码:

string = '010';
write = eval(string);
document.write(write)

我在页面上写了8个。为什么? 即使010不是字符串,也会发生这种情况。

3 个答案:

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

如果要解析整数或理解八进制,请阅读其他答案。