问题:

{} + []
  • {} + [] 结果应该是 0
  • console.log({} + []) 结果应该是 object object

两个 {} 的语义不一样,前者被解析成 {}; +[]; 后者 {} 为对象.

  • 操作符,针对非 Number 的处理内部调用 ToPrimary() 函数, {} 和 [] 都执行了自身的 toString 函数

    ({} + [])
    ({}) + []

这些表达式中,{}都被当做对象来解析,而不是 作用块