为什么在严格模式下不允许八进制数字文字(解决方法是什么?)
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);
为什么 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);