You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS中{}作为对象与空块作用域的区别及{}+[]输出差异解析

关于console.log({}+[])的解析差异问题

两种解析逻辑说明

  • 理论派的推导逻辑:部分观点认为{}+[]会被拆分为两部分——开头的{}是空代码块,后续的+[]是一元加号运算。按照JS类型转换规则,空数组[]先转为空字符串"",再经一元+转换为数字0,因此认为最终输出应为0。
  • 实际引擎的处理逻辑:所有JavaScript引擎在处理console.log({}+[])时,都会将{}+[]视为空对象与空数组的二元加法运算。根据隐式类型转换规则:
    • 空对象{}转为字符串的结果是"[object Object]"
    • 空数组[]转为字符串的结果是""
    • 两者执行字符串拼接后得到"[object Object]",这就是console.log实际输出的内容。

解析差异的核心原因

差异源于代码上下文的解析规则:

  • 当{}+[]作为独立语句存在时,部分环境(如Chrome控制台)会将开头的{}解析为代码块,后续的+[]作为独立表达式执行,返回0;
  • 但在console.log()的参数位置,{}+[]处于表达式上下文,引擎会强制将{}解析为对象字面量而非代码块,因此执行的是对象与数组的加法运算。

内容的提问来源于stack exchange,提问作者Rizwan Saifi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 12:33:11