为什么 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/