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

Chrome控制台中空数组与空对象相加结果的疑问求解

拆解JavaScript中几个反直觉的+运算结果

嘿,我来帮你理清这几个看起来有点奇怪的表达式结果,核心要抓两个点:JavaScript里+运算符的类型转换规则,还有代码块与对象字面量的歧义解析。

1. [] + {} => "[object Object]"

当+运算符两边有非原始类型(对象/数组)时,JS会先把它们转换成原始值:

  • 数组[]调用默认的转换方法时,会先尝试toString(),得到空字符串""
  • 对象{}调用toString()时,默认返回"[object Object]"
    最后就是字符串拼接:"" + "[object Object]",结果自然就是"[object Object]"。

2. {} + {} => "[object Object][object Object]"

在Chrome控制台的环境下,这里的两个{}都会被解析成对象字面量(而非代码块),所以同样触发类型转换:

  • 两个{}各自转成"[object Object]",然后字符串拼接,就得到了两个字符串连在一起的结果。

3. {} + [] => 0

这是最容易迷惑的一个!问题出在解析优先级:

  • 当{}出现在语句的开头时,JS解析器会优先把它识别成空代码块(就像你写{}单独一行一样,什么都不做)
  • 剩下的+ []是一元加号运算符,它的作用是把值转换成数字:
    • 先把[]转成字符串"",再把空字符串转成数字,结果就是0
      如果把表达式用括号包起来,强制让{}成为表达式的一部分:({} + []),结果就会变成"[object Object]",和第一个例子的逻辑一致。

4. [] + [] => ""

两个数组都会触发转换:

  • 每个[]调用toString()都得到空字符串""
  • 空字符串加空字符串,结果还是空字符串""

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:29:24