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

Why are Octal numeric literals not allowed in strict mode (and what is the workaround?)

为什么 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 (which can mistakenly change a numbers meaning),是否有解决方法?

问题的 "why" 部分无法真正回答。

至于"how",我想不通了...

"use strict";
var x = parseInt('010', 8);
document.write(x);

Why is Octal numeric literals not allowed in javascript strict mode? What is the harm?

JS 中的八进制历来是标准的非标准扩展(在引入严格模式的 ES5 中,它们在附件 B 中,这是大多数实现支持的非标准功能的集合:除了它以一种与网站要求不兼容的方式定义了八进制),并且严格模式试图禁止所有非标准扩展。 "why" 为什么它们从未被标准化是一个明显的相关问题,我不知道。

In case a developer need to use Octals (which can mistakenly change a number's meaning), is there a work around?

正如@Amit 回答的那样,parseInt 其第二个参数为 8 在严格模式下仍然有效。

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

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 参数来指定八进制。

这里有两个"solutions",分别是:

"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);

如今,随着对 ES6 的大量浏览器支持,您可以这样写:

const NINE = 0o11; // octal
const TEN = 0b1010; // binary
const SEVENTEEN = 0x11; // hexa

也许您在 JS 的“严格模式”中使用了错误的字符串文字 ( '' )。

正确:{ “名字”:“乔什” }

错误:{ 'name': 'Josh' }

基本上当我尝试使用这种格式时 日期 = 新日期 (2021,09,07) 反应并传递给另一个组件,以便我可以转换为 ISOString() 或 toLocaleString(),// {props.toISOString()}。 我收到此错误消息“在严格模式下不允许遗留八进制文字”

但是,在删除月份和日期之前的“零”后,将其更改为 date = new Date(2021,9,7) 它对我来说完全没问题。

如果您在代码之上应用严格模式,则需要将其置于此格式中

"use strict";
    var x = '010';
   console.log(x);