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

为什么在JavaScript中[-[]]和[+[]]的运行结果都为[0]?

JavaScript 中 [-[]] 与 [+[]] 均返回[0]的技术原理

这个现象本质是JavaScript隐式类型转换规则和一元运算符的执行逻辑共同作用的结果,我们可以逐层拆解表达式的计算过程:

第一步:拆解表达式结构

两个表达式都可以拆成两部分:先计算括号内的一元运算结果,再将结果作为唯一元素存入数组:

  • [+[]] = 先算 +[] 得到值A,再返回 [A]
  • [-[]] = 先算 -[] 得到值B,再返回 [B]

第二步:空数组[]的原始值转换规则

当一元运算符作用于引用类型(数组属于引用类型)时,会先触发ToPrimitive隐式转换把引用类型转成原始值:

  1. 优先调用数组的valueOf()方法,返回的是数组本身,仍然是引用类型,不符合原始值要求
  2. 继续调用数组的toString()方法,空数组调用toString()会返回空字符串''

第三步:一元加+的运算逻辑

一元加运算符的作用是把操作数强制转换为数字类型:

  • 空字符串''转换为数字的结果是0
  • 因此+[]的最终结果是0,存入数组后就是[0]

第四步:一元减-的运算逻辑

一元减运算符会先把操作数强制转换为数字类型,再对结果取负:

  1. 空数组转数字后同样得到0
  2. 对0取负得到-0,而JavaScript中-0和+0在常规数值运算、打印输出场景下完全等价,数组中存入-0后打印也会显示为0
  • 因此[-[]]的最终结果也是[0]

测试验证代码

console.log([+[]]) // 输出 [0]
console.log([-[]]) // 输出 [0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:15:02