【问题标题】:Why does parseInt("09") return 0 but parseInt("07") return 7? [duplicate]为什么 parseInt("09") 返回 0 而 parseInt("07") 返回 7? [复制]
【发布时间】:2012-02-04 12:12:34
【问题描述】:

可能重复:
Workarounds for JavaScript parseInt octal bug

为什么

parseInt("09") 

返回0 但是

parseInt("07") 

返回7?

【问题讨论】:

  • 不是 lmgtfy 答案的忠实粉丝,但您是否尝试过用谷歌搜索这个确切的短语:“为什么 parseInt(09) 返回 0”?
  • 很多关于 parseInt() 和使用正确基数的问题已经得到解答。
  • 这是一个 javascript 陷阱。查看this StackOverflow 答案以获取更多信息

标签: javascript


【解决方案1】:

0 开头的字符串的基数可以是八进制(当未指定基数时 - 取决于浏览器)。

您正在寻找:

parseInt("09", 10)

查看parseInt的文档:

如果 radix 未定义或为 0,JavaScript 假定如下:

  • 如果输入字符串以“0x”或“0X”开头,则基数为 16(十六进制)。
  • 如果输入字符串以“0”开头,则基数为八(八进制)。这个特性是非标准的,一些实现故意不支持它(而是使用基数 10)。因此,在使用 parseInt 时始终指定一个基数。
  • 如果输入字符串以任何其他值开头,则基数为 10(十进制)。

radix 可选参数(我的示例中的第二个)的 cmets 表示:

虽然此参数是可选的,但始终指定它以消除读者混淆并保证可预测的行为。

【讨论】:

【解决方案2】:

前导0表示煤值“020”为16,“07”为7,八进制中没有数字“9”,因此没有转换!

使用 parseInt("09", 10) 得到值 9。

【讨论】:

    猜你喜欢
    • 2012-07-31
    • 1970-01-01
    • 2014-06-06
    • 2012-07-05
    • 2012-09-01
    • 2011-10-17
    • 2011-09-18
    • 2018-10-01
    • 2023-01-26
    相关资源
    最近更新 更多