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

时间:2015-12-18 14:55:12

标签: javascript ecmascript-5 octal strict-mode

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

w == 0
"use strict";
var x = 010; //Uncaught SyntaxError: Octal literals are not allowed in strict mode.

如果开发人员需要使用Octals(可能会错误地更改numbers meaning),是否有解决方法?

5 个答案:

答案 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,可能您使用了错误的字符串字面量( '' )。

正确:{ “姓名”:“乔希” }

错误:{ '姓名':'乔什' }