加号(+)是JavaScript中唯一具有字符串拼接优先级的算术运算符;只要任一操作数为字符串,即触发拼接,其余操作数统一转为字符串后连接,且从左到右依次执行。

加号(+)在 JavaScript 中是唯一具有“字符串拼接优先级”的算术运算符。只要左右任一操作数是字符串,整个表达式就按字符串拼接处理,而不是数值相加。
拼接触发条件
只要有一个操作数是字符串类型,+ 就立即切换为拼接模式,其他操作数会统一调用 String() 转为字符串后再连接:
-
"5" + 2→"52"(数字 2 转成字符串 "2") -
true + "abc"→"trueabc"(布尔 true → "true") -
null + "test"→"nulltest"(null → "null") -
undefined + "1"→"undefined1"(undefined → "undefined")
执行顺序从左到右
多个 + 连续出现时,按从左到右顺序逐个计算,一旦某步结果为字符串,后续所有操作都走拼接路径:
-
1 + 2 + "3"→ 先算1 + 2得3(数字),再3 + "3"→"33" -
"1" + 2 + 3→"1" + 2→"12",再"12" + 3→"123" -
1 + [] + "2"→[]转为空字符串 "",1 + ""→"1",再"1" + "2"→"12"
对象和数组的特殊表现
遇到对象或数组时,+ 会先尝试将其转为原始值(调用 toString() 或 valueOf()),再参与拼接:
-
[1,2] + "3"→[1,2].toString()是"1,2",结果为"1,23" -
{} + "1"在非严格模式下会被解释为代码块,实际执行的是+"1"(即Number("1")),但若写成({}) + "1",则{}调用toString()得"[object Object]",结果为"[object Object]1" -
function(){} + "test"→ 函数转字符串后是源码文本,如"function(){}test"
如何避免意外拼接
当本意是数值相加却混入字符串时,容易出错。可主动控制类型:
- 用
Number(a) + Number(b)强制转数字 - 用
parseInt(a) + parseInt(b)处理整数场景 - 用
parseFloat(a) + parseFloat(b)处理浮点数 - 检查是否含字符串:
typeof a === 'string' || typeof b === 'string',提前干预











