在 JavaScript 中,eval(010) 返回 8

IT技术 javascript
2021-03-05 14:17:53

如果我使用代码:

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

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

3个回答

因为 010 被解析为八进制。Javascript 将前导零视为表示该值在基数 8 中。

同样,0x10 会给你 16,以十六进制解析。

如果要使用指定的基数解析字符串,请使用 parseInt:

parseInt('010', 8); // returns 8.
parseInt('010',10); // returns 10.
parseInt('010',16); // returns 16.
有关更多信息,请参阅javascripter.net/faq/octalsan.htm
2021-04-29 14:17:53
您还可以覆盖默认parseInt()行为,使其不再执行此操作,如下所述: codethink.no-ip.org/wordpress/archives/394
2021-05-04 14:17:53

给一个数字加上前缀0意味着它是八进制的,即基数 8。类似于0x十六进制数(基数 16)的前缀

使用的第二个参数parseInt来强制基数:

> parseInt('010')
8
> parseInt('010', 10)
10
+1 提供解决方案。或者,您可以使用一元+
2021-04-25 14:17:53
这是因为如果 010 不是字符串,那么它会在作为参数传递给 parseInt 之前被解析为数字文字。
2021-04-29 14:17:53
哦。非常感谢人。有趣的是,如果 010 不是字符串, parseInt('010',10) 技巧将不起作用。
2021-05-03 14:17:53
@真棒一个。那是因为它被赋予时010已经是数字无法区分其参数是, , , 或8parseIntparseInt01084+4parseInt("010")
2021-05-18 14:17:53

如果您想将字符串输出010到文档,您可以将值括在引号中:

var octal = eval('"010"');
typeof octal; // "string"

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