javascript - 为什么在严格模式下不允许八进制数字文字(解决方法是什么?)

标签 javascript ecmascript-5 octal strict-mode

为什么 JavaScript strict mode 中不允许使用八进制数字文字?有什么危害?

"use strict";
var x = 010; //Uncaught SyntaxError: Octal literals are not allowed in strict mode.
<h1>Check browser console for errors</h1>

以防开发人员需要使用Octals (这可能会错误地更改 numbers meaning ),有解决方法吗?

最佳答案

八进制文字是不允许的,因为不允许它们会阻止程序员在脚本中使用前导零作为填充。例如,查看以下代码段:

var eight = 0008,
    nine = 00009,
    ten = 000010,
    eleven = 011;

console.log(eight, nine, ten, eleven);

看起来无害,对吧?我们有强制症的程序员只想将所有逗号对齐,这样看起来更好。但问题是:

8 9 8 9

这是输出。看看它变得多么不一致?并非所有零填充数字文字都会转换为八进制,因为 8 和 9 不是八进制数字。当必须记住所有这些规则时,很难使它们保持一致,因此 strict mode 通过完全禁止它使它变得更容易。

相反,你应该用前导空格填充,或者如果你想使用八进制,那么使用 parseInt()使用 8 的可选 radix 参数来指定八进制。

这里分别给出两种“解决方案”:

"use strict";

var eight  =  8,
    nine   =  9,
    ten    = 10,
    eleven = 11;

console.log(eight, nine, ten, eleven);

"use strict";

var eight  = parseInt('010', 8),
    nine   = parseInt('011', 8),
    ten    = parseInt('012', 8),
    eleven = parseInt('013', 8);

console.log(eight, nine, ten, eleven);

关于javascript - 为什么在严格模式下不允许八进制数字文字(解决方法是什么?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34358331/

相关文章:

javascript - querySelectorAll 查找哪个按钮被选中 JavaScript

javascript - 在没有 Object.defineProperty 的情况下定义不可写属性?

javascript - 使用 WebSockets 的 react 原生应用程序中的架构

javascript - ExtJS4:为什么当我在我的商店中使用 directFn 配置时,我需要将 directCfg.method 指定为 directFn 的属性

javascript - 为什么 getElementById 在类内部调用时返回 null?

c - 在 C 中,为什么 %o 不能打印负值?

c - 在 printf 中打印八进制文字

javascript - 当我们使用数组名称而不是扩展运算符时有什么区别?

javascript - 如何链接两个构造函数并将它们作为对象的原型(prototype)继承?

将十进制转换为十六进制和八进制