【发布时间】:2021-06-12 13:53:57
【问题描述】:
在 Javascript 中有一些我不理解的行为:
- 为什么
console.log(011666)登录5046? - 为什么
typeof typeof 500登录string?
【问题讨论】:
-
以
0开头的数字被解释为八进制数。typeof 500返回一个字符串。字符串的类型是'string' -
这个以零为八进制数的东西幸运地正在慢慢修复。 ES6 引入了以
0o为前缀的八进制(零后跟'o' 表示'八进制')。我很高兴看到 JavaScript 的怪癖得到解决。 -
@RoboRobok 这不仅仅是 JavaScript。多种语言都有这个。它至少是 C、C++ 和 PHP,可能更多。
-
不知道其他语言,但这只是愚蠢的。例如,为什么是八进制而不是二进制?还是只是十进制?当你在不知道它实际上是八进制的随机事实的情况下阅读它时,不清楚它会做什么。
-
@jabaa 这只是因为它被解释为
{}; +{};,这是一个空块语句,然后是应用于对象的一元加号(它被强制为原语,但那是"[object Object]",它是'不是数字字符串,所以结果是NaN)。全部在What is the explanation for these bizarre JavaScript behaviours mentioned in the 'Wat' talk for CodeMash 2012? 中解释。另外,{} + {} === NaN是不可能的……你的意思是isNaN(+{}),这并不那么神秘。
标签: javascript javascript-objects console.log firefox-developer-tools google-developers-console