【问题标题】:Javascript unexpected behaviors [duplicate]Javascript意外行为[重复]
【发布时间】:2021-06-12 13:53:57
【问题描述】:

在 Javascript 中有一些我不理解的行为:

  1. 为什么console.log(011666) 登录5046
  2. 为什么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


【解决方案1】:
  1. 0 开头的数字被解释为八进制数。一个更简单的例子:

console.log(010);
  1. typeof 500 返回一个字符串 'number'。字符串'number' 的类型是'string'

console.log(typeof 500);
console.log(typeof 'number');

【讨论】: