Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中,eval(010)返回8_Javascript - Fatal编程技术网

在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”)