栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么JavaScript如果数字以前导零开头,则将其视为八进制

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么JavaScript如果数字以前导零开头,则将其视为八进制

历史

问题在于十进制整数文字不能包含前导零:

DecimalIntegerLiteral ::    0    NonZeroDigit DecimalDigits(opt)

但是,ECMAscript 3允许(作为可选扩展)解析以8为底的前导零的文字:

OctalIntegerLiteral ::    0 OctalDigit    OctalIntegerLiteral OctalDigit

但是ECMAscript 5禁止以严格模式执行此操作:

一致性实现,在处理时严格模式代码(见10.1.1) ,必须不延伸的语法 NumericLiteral 包括_OctalIntegerLiteral_ 如描述B.1.1。

ECMAscript 6引入了 BinaryIntegerLiteralOctalIntegerLiteral,所以现在我们有了更多连贯的文字:

  • BinaryIntegerLiteral ,以
    0b
    开头
    0B
  • OctalIntegerLiteral ,以
    0o
    开头
    0O
  • HexIntegerLiteral ,以
    0x
    开头
    0X

旧的 OctalIntegerLiteral 扩展名已重命名为 LegacyOctalIntegerLiteral ,但仍可以在非严格模式下使用。

结论

因此,如果要解析以8为底的数字,请使用

0o
0O
前缀(旧浏览器不支持)或使用
parseInt

而且,如果您想确保自己的数字将以10为底进行解析,请删除前导零或使用

parseInt

例子

  • 010
    • 在严格模式下(需要ECMAscript 5),它会抛出。
    • 在非严格模式下,它可能会抛出或返回
      8
      (取决于实现)。
  • 0o10
    0O10
    • 在ECMAscript 6之前,它们会抛出。
    • 在ECMAscript 6中,它们返回
      8
  • parseInt('010', 8)
    • 它返回
      8
  • parseInt('010', 10)
    • 它返回
      10


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/614745.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号