JavaScript 中带前导零的数字

2023-12-20

尝试这个:

var num = 040;
console.log(num); // 32

从什么时候开始40 = 32?


TL;DR

由于前导,它被视为八进制(基数 8)0,就像领先的0x会将其设为十六进制(以 16 为底)。这有着悠久而痛苦的历史,并且不再是现代 JavaScript 中八进制数字的编写方式。在使用严格模式的现代 JavaScript 中,“传统”八进制格式是一个语法错误;八进制数的写法是0o prefix.

History

早期(在 Netscape 的初始语言以及第一个和第二个 ECMAScript 规范中),一个领先的0数字文字的正式含义octal(基数 8),就像前导0x表示十六进制(基数为 16):

OctalIntegerLiteral ::
    0 OctalDigit
    OctalIntegerLiteral OctalDigit

E.g., 10, 012, and 0xA是十进制数字 10 的所有写法。这与语法类似于 JavaScript 的其他一些语言(C、C++、Java...)一致,但它非常令人困惑。

从 ECMAScript 3 开始,这种形式的八进制文字已降级为可选扩展,并且十进制整数文字已更改,以便它们不能有前导零(除非实现包含扩展):

DecimalIntegerLiteral ::
    0
    NonZeroDigit DecimalDigits(opt)

But ECMAScript 5 http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.3禁止在严格模式下这样做:

处理时一致的实现严格模式代码(参见 10.1.1) http://www.ecma-international.org/ecma-262/5.1/#sec-10.1.1,不得扩展语法数字文字包括八进制整数 文字如中所述B.1.1 http://www.ecma-international.org/ecma-262/5.1/#sec-B.1.1.

ECMAScript 6 http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-numeric-literals(ECMAScript 2015)介绍二进制整数 文字 and 八进制整数 文字,所以现在我们有了更连贯的文字:

  • 二进制整数 文字,前缀为0b or 0B.
  • 八进制整数 文字,前缀为0o or 0O.
  • 十六进制整数常量,前缀为0x or 0X.

The old 八进制整数 文字扩展名已重命名为旧版八进制整数常量,在非严格模式下仍然允许。

结论

因此,如果您想解析以 8 为基数的数字,请使用0o or 0O前缀(旧浏览器不支持),或使用parseInt.

如果您想确保您的数字将以 10 为基数进行解析,请删除前导零,或使用parseInt.

Examples

  • 010
    • 在严格模式下(需要 ECMAScript 5),这是一个语法错误。
    • 非严格模式下,可能是语法错误或者返回8(取决于实现)。
  • 0o10, 0O10
    • 在 ECMAScript 6 之前,它们是语法错误。
    • 在 ECMAScript 6 中,它们返回8.
  • parseInt('010', 8)
    • 它返回8.
  • parseInt('010', 10)
    • 它返回10.

如果您有兴趣,可以查找目前的居住规格here https://tc39.github.io/ecma262/,以及历史版本here http://www.ecma-international.org/publications/standards/Ecma-262-arch.htm.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 中带前导零的数字 的相关文章

  • Angular $http.get:如何捕获所有错误?

    我发送一个表单到nodejs进行身份验证 使用 http get在以下函数中并添加promise gt then 在生产中 这是否可以处理我可能从服务器收到的所有错误 我还需要向此功能添加其他内容吗 MyApp controller Log
  • 单击时获取元素的 id(php、jquery、ajax、javascript)

    抱歉 这是我的第一个项目 我学到了很多东西 因此 如果有人可以帮助我 我将不胜感激 我的项目中有这个侧边栏 其中包含 rss 链接 我必须使用 ajax 因此每次用户单击任何 rss 链接时 提要都会出现在屏幕上 这是我的侧边栏代码 div
  • 如何让 Google Apps 脚本进行 SHA-256 加密?

    我需要使用文本输入 1 轮 十六进制输出 SHA 256 加密来加密字符串 这应该是一个长度为 64 的字符串 我在 Google Apps 脚本文档中尝试过的每个 SHA 256 加密模块都会返回一组数字 例如 function SHA2
  • Exceljs:迭代每行和每列的每个单元格

    我想在所有单元格中添加粗边框 这是一个有角度的项目 我正在使用打字稿 我可以为 1 个单元格做到这一点 worksheet getCell A1 border top style thick left style thick bottom
  • Javascript hasOwnProperty 在事件对象上总是 false?

    我希望有人可以帮助澄清与事件对象相关的 hasOwnProperty 方法 我正在尝试克隆鼠标事件 最终该对象将被传递到 iframe 我已经构建了一个 克隆 函数 但每当我尝试克隆窗口事件 即滚动 单击等 时 hasOwnProperty
  • 如何使用jquery格式化数字

    我正在尝试删除 之后的数字 然后我想格式化数字 16810900 211233 喜欢这个 16 810 900 但我不知道该怎么做 这是我的 html 是这样的 div class main p class active 10200 00
  • 如何使用 Underscore 获取 JavaScript 数组中的重复项

    我有一个数组 我需要重复的项目并根据特定属性打印这些项目 我知道如何使用 underscore js 获取唯一项目 但我需要找到重复项而不是唯一值 var somevalue name john country spain name jan
  • Javascript 自时间戳以来经过的时间

    我试图通过将其存储在变量中来 缓存 一些信息 如果 2 分钟过去了 我想获取 实时 值 调用 url 如果 2 分钟还没有过去 我想从变量中获取数据 我基本上想要的是 if time passed is less than 2 minute
  • 粉碎一个元素,向随机方向发送碎片

    我试图 粉碎 一个元素 例如 一个图像 并将其碎片朝随机方向飞行 当碎片到达目的地时 即x距离 以像素为单位 它们变成原始图像的较小版本 jQuery UI 的explode http api jqueryui com explode ef
  • 如何使用 console.log 省略文件/行号

    如今 您可以在 Chrome 的控制台中编写非常好的东西 查看this https developer chrome com devtools docs tips and tricks关联 我也做了一个截图 正如您在屏幕截图中看到的那样 文
  • 如何垂直打印数组中的字符串元素? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个数组 我想垂直打印每个元素 例如 myArr abc def ghi 输出应该是 a d g b e h c f
  • 它们是“相同的”吗?代码大战

    这是完整的问题描述 给定两个数组 a 和 b 编写一个函数 comp a b Clojure 中的 compSame a b 来检查这两个数组是否具有 相同 元素以及相同的重数 这里 相同 意味着 b 中的元素是 a 平方中的元素 无论顺序
  • 上传前如何检查图片的宽度和高度

    对于图片上传 我编写了以下 html 代码
  • 根据数据更改图例颜色高图表

    我可以根据数据动态设置列的颜色 但无法弄清楚如何更改图例中的颜色 请注意 jsfiddle 最新的条形图是绿色的 但图例是蓝色的 有没有办法改变列颜色也会改变图例颜色 这是我用于列颜色的代码 jsfiddle http jsfiddle n
  • 'DOMException:使用'option:selected'选择器时无法在'Element'上执行'querySelectorAll'

    我正在运行一个页面 该页面在以下行中引发错误 var label select find option selected html select find option first html 为了完整起见 这里是完整的 jQuery 函数
  • 谷歌浏览器如何启动桌面应用程序?

    我真的不知道术语 所以我将从一个例子开始 如果我点击磁力链接 Google Chrome 会询问我是否要启动 torrent 客户端 我单击 确定 chrome 启动该应用程序 该应用程序根据链接执行一些操作 现在有办法查看应用程序如何从
  • javascript 中一次仅选中一个复选框

    I have 3复选框 我只想1一次选中的复选框 下面是我的 html 小提琴 JS小提琴 https jsfiddle net n03jLhqa 我想要这个工作在IE8还请建议如何做 这个怎么样 fiddle http jsfiddle
  • Bootstrap 3 - 模态背景不会根据模态对话框的高度调整大小?

    我将一个表单放入模式中 并尝试在用户触发单选按钮时显示表单的一些隐藏字段 显示隐藏字段后 模态自动重新缩放的高度 但模态背景的高度不能用作模态对话框 我该如何解决它 div class modal fade div class modal
  • .parents() 没有 jquery - 或 querySelectorAll 为父母[重复]

    这个问题在这里已经有答案了 可能的重复 使用 matchesSelector js 检查 event target parentElement https stackoverflow com questions 12977658 check
  • 在 Map() 的条目上使用 Promise.all

    我正在使用 Map 来表示一些键 值对 let myMap new Map myMap set foo bar myMap set foo2 bar42 对于每个 Map 条目 我执行一个返回 Promise 的函数 所有这些 Promis

随机推荐