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

2024-05-09

为什么八进制数字文字不允许JavaScript 严格模式 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Strict_mode?有什么害处呢?

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

万一开发商needs to use Octals https://en.wikipedia.org/wiki/Octal(这可能会错误地改变数字含义 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Strict_mode#Converting_mistakes_into_errors),有解决方法吗?


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

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

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

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

8 9 8 9

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

相反,您应该用前导空格填充,或者如果您想使用八进制,则使用parseInt() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt与可选的radix的论证8指定八进制。

以下分别是两个“解决方案”:

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

为什么严格模式下不允许使用八进制数字文字(解决方法是什么?) 的相关文章

随机推荐