true + 1 === 2 成立,因为 javascript 在数值运算中将 true 隐式转换为 1,再执行加法得 2;加号优先数值转换而非字符串拼接,且布尔转数值规则为 true→1、false→0。

在数值运算中,true + 1 === 2 成立,是因为 JavaScript 对布尔值执行了**隐式数值转换**:true 被自动转为 1,false 被转为 0,然后参与算术运算。
布尔值转数值的规则很明确
JavaScript 在遇到需要数值的上下文(如加减乘除、比较、一元加号等)时,会把布尔值按固定规则转成数字:
true → 1false → 0
为什么 true + 1 得到 2,而不是字符串拼接
关键看运算符和操作数类型组合。加号 + 有两种行为:
- 两边都是数值或可转为数值 → 执行加法
- 任意一边是字符串 → 全部转为字符串后拼接
这里 true 不是字符串,1 是数值,引擎优先尝试数值转换:true → 1,再算 1 + 1 = 2。
验证其他常见组合
你可以用这些例子快速确认转换是否发生:
-
true + false→1 + 0 === 1 -
5 * false→5 * 0 === 0 -
+true(一元加号)→1 -
+false→0
注意:它不等于强制转换,但结果一致
虽然 Number(true) === 1 和 true + 0 === 1 结果相同,但机制不同:前者是显式调用,后者是运行时自动推导。实际编码中,+ 是最轻量的“转数值”技巧之一,但仅限简单场景;逻辑复杂时建议用 Number() 或 parseInt() 明确意图。










