在JavaScript中,eval(010)返回8
如果我使用代码:在JavaScript中,eval(010)返回8,javascript,Javascript,如果我使用代码: string = '010'; write = eval(string); document.write(write) 我在纸上写了8个字。为什么? 即使010不是字符串,也会发生这种情况。因为010被解析为八进制。Javascript将前导零视为表示该值以8为基数 类似地,0x10将为您提供16,以十六进制进行解析 如果要使用指定的基解析字符串,请使用parseInt: parseInt('010', 8); // returns 8. parseInt('010',10)
string = '010';
write = eval(string);
document.write(write)
我在纸上写了8个字。为什么?
即使010不是字符串,也会发生这种情况。因为010被解析为八进制。Javascript将前导零视为表示该值以8为基数 类似地,0x10将为您提供16,以十六进制进行解析 如果要使用指定的基解析字符串,请使用parseInt:
parseInt('010', 8); // returns 8.
parseInt('010',10); // returns 10.
parseInt('010',16); // returns 16.
在数字前面加上
0
表示它是以8为基数的。类似于十六进制数字(以16为基数)的前缀0x
使用的第二个参数强制基础:
> parseInt('010')
8
> parseInt('010', 10)
10
如果要将字符串
010
输出到文档,可以将该值用引号括起来:
var octal = eval('"010"');
typeof octal; // "string"
如果要解析整数或理解八进制,请阅读其他答案。有关详细信息,请参阅。您还可以覆盖默认的
parseInt()
行为,使其不再执行此操作,如下所述:var i=010代码>也给你8。与eval
无关。哦,是的。没有注意到.+1用于提供解决方案。或者,您可以使用一元+
.Oh。谢谢你,伙计。有趣的是,如果010不是字符串,则parseInt('010',10)技巧将不起作用。这是因为如果010不是字符串,则在作为参数传递给parseInt之前,它将被解析为数字文本。@非常棒的一个。这是因为010
在被赋予parseInt
时已经是数字8
parseInt
无法区分其参数是010
、8
、4+4
还是parseInt(“010”)