【问题标题】:In JavaScript, eval(010) returns 8 [duplicate]在 JavaScript 中,eval(010) 返回 8 [重复]
【发布时间】:2023-04-08 04:46:01
【问题描述】:

如果我使用代码:

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

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

【问题讨论】:

  • var i = 010; 也给你 8 个。与eval无关。
  • 哦,是的。没注意到。

标签: javascript


【解决方案1】:

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

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

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

parseInt('010', 8); // returns 8.
parseInt('010',10); // returns 10.
parseInt('010',16); // returns 16.

【讨论】:

【解决方案2】:

0 为数字前缀意味着它是octal,即以8 为基数。类似于以0x 为前缀的十六进制数字(以16 为基数)。

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

> parseInt('010')
8
> parseInt('010', 10)
10

【讨论】:

  • +1 用于提供解决方案。或者,您可以使用一元 +
  • 哦。非常感谢伙计。有趣的是,如果 010 不是字符串,则 parseInt('010',10) 技巧将不起作用。
  • 这是因为如果 010 不是字符串,那么在作为参数传递给 parseInt 之前,它会被解析为数字文字。
  • @很棒的一个。那是因为当010 被赋予parseInt 时,它已经是数字8parseInt 无法区分其参数是01084+4 还是parseInt("010")
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 2016-06-29
    相关资源
    最近更新 更多