为什么JavaScript strict mode中不允许使用八进制数字文字?有什么危害?
w == 0
"use strict";
var x = 010; //Uncaught SyntaxError: Octal literals are not allowed in strict mode.
如果开发人员需要使用Octals(可能会错误地更改numbers meaning),是否有解决方法?
答案 0 :(得分:12)
不允许使用八进制文字,因为禁止它们会阻止程序员在脚本中使用前导零作为填充。例如,请查看以下代码段:
var eight = 0008,
nine = 00009,
ten = 000010,
eleven = 011;
console.log(eight, nine, ten, eleven);
似乎无害,对吗?我们使用OCD的程序员只想将所有逗号对齐,以便它看起来更好。但问题出在这里:
8 9 8 9
这是输出。看看它变得多么不一致?并非所有零填充数字文字都将转换为八进制,因为8和9不是八进制数字。在必须记住所有这些规则时,保持它们的一致性更加困难,因此strict mode
通过完全禁止它来使它更容易。
相反,你应该使用前导空格填充,或者如果你想使用八进制,那么使用parseInt()
和radix
的{{1}}参数来指定八进制。
以下是两个“解决方案”:
8
"use strict";
var eight = 8,
nine = 9,
ten = 10,
eleven = 11;
console.log(eight, nine, ten, eleven);
答案 1 :(得分:10)
"为什么"问题的一部分并不是真的可以回答。
至于"怎么",在我的头顶......
"use strict";
var x = parseInt('010', 8);
document.write(x);

答案 2 :(得分:5)
为什么在javascript严格模式下不允许使用八进制数字文字?有什么危害?
JS中的八进制历来是标准的非标准扩展(在ES5中引入严格模式,它们在附件B中,这是大多数实现支持的非标准功能的集合:除了它以与网站要求的方式不兼容的方式定义octals,严格模式试图禁止所有非标准扩展。 "为什么"至于为什么他们从未标准化是一个明显的相关问题,而且我不知道。
如果开发人员需要使用Octals(可能会错误地更改数字的含义),是否有解决方法?
当@Amit回答时,parseInt
第二个参数为8仍然在严格模式下工作。
答案 3 :(得分:5)
如今,有了对ES6的大量浏览器支持,你可以这样写:
const NINE = 0o11; // octal
const TEN = 0b1010; // binary
const SEVENTEEN = 0x11; // hexa
答案 4 :(得分:-3)
对于 JS 中“严格模式”的 JSON,可能您使用了错误的字符串字面量( '' )。
正确:{ “姓名”:“乔希” }
错误:{ '姓名':'乔什' }