【问题标题】:javascript Unary plus between brackets [duplicate]括号之间的javascript一元加号[重复]
【发布时间】:2019-08-15 09:35:29
【问题描述】:

1.{}+[]0

2.[]+{} 给出[object object] 我知道 1 和 2 是怎么来的,但是

3.{}+[]+{}[object object][object object]

不应该是0[object object]

【问题讨论】:

  • 代码在哪里执行?
  • 代码在 Chrome REPL 中执行。
  • @mplungjan:我认为这些都是错误的。 stackoverflow.com/q/36438034/218196 是正确的副本。
  • Chrome 使用简单的启发式算法,并将以{ 开头并以} 结尾的行作为表达式求值。因此{}+[]+{} 中的{} 都被评估为对象一个对象,而{}+[] 中的{} 是一个块。
  • 绝对清楚:您将在其他环境(例如 Firefox)中获得0[object object]。只是 Chrome 控制台将 {}+[]+{} 解释为就像您写 ({}+[]+{}) 一样。

标签: javascript arrays object


【解决方案1】:

当您使用console.log 时,它会执行toString - 当您使用{} + [] 时,它会执行[object Object]

console.log({} + []);

(注意:只需将{} + [] 放入开发者工具控制台即可得到0,因为不会调用toString

这就是为什么这会产生[object Object][object Object]

console.log({} + [] + {});

因为您将一个对象(由{} + [] 组成)添加到另一个对象,并且因为您使用+ 连接运算符,所以这会强制toString - 因此,您要添加[objectObject][object Object],产生[object Object][object Object]

注意:以上所有内容均在 Chrome 上。在 Firefox 和其他可能的情况下,它们的工作方式不同,这就是您问题中的某些内容不同的原因。

【讨论】:

  • ({}+[]) 这会[object object] 为什么
  • ({}+[]) vs {}+[] vs console.log({}+[]) 有什么区别
  • 因为在console.log中,它调用了toString
  • 好的,但是 ({}+[]) 它也调用 toString()
  • 那是因为()
猜你喜欢
  • 2014-11-26
  • 1970-01-01
  • 2015-10-16
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
相关资源
最近更新 更多