javascript中+运算符会拼接而非相加,因其是重载运算符:只要任一操作数为字符串或可转为字符串的值(如null、[]),就全部转为字符串后拼接;仅当两操作数均为数字或可安全转为数字的原始值时才执行数值相加。

当 JavaScript 中使用 + 运算符时,如果**任意一个操作数是字符串**,整个运算就会触发**字符串拼接**(即类型强制转换为字符串后连接),而不是数学加法。
为什么 + 会拼接而不是相加?
JavaScript 的 + 是“重载”运算符:它既用于数字相加,也用于字符串拼接。引擎按以下规则判断行为:
- 如果任一操作数是字符串(或能被转为字符串的值,如
undefined、null、对象),则**全部转为字符串再拼接** - 仅当两个操作数都是数字(或可安全转为数字的原始值,如
"123"、true)时,才执行数值相加
常见触发字符串拼接的情况
以下写法都会导致拼接,哪怕另一个操作数是数字:
-
"5" + 3→"53"(字符串优先) -
7 + ""→"7"(空字符串让数字变字符串) -
1 + "2" + 3→"123"(从左到右,首次遇到字符串后全程拼接) -
"hello" + null→"hellonull"(null转为字符串"null") -
42 + []→"42"(空数组[]转为空字符串"")
如何避免意外拼接,确保数值相加?
若你本意是做算术运算,需主动确保操作数为数字类型:
- 用
Number()强制转换:Number("5") + 3→8 - 用一元加号
+快速转数字:+"5" + 3→8 - 用
parseInt()或parseFloat()处理含非数字字符的字符串(注意进制和小数) - 先校验类型:
typeof x === 'number' && typeof y === 'number'再相加
小技巧:记住“+ 遇到字符串就投降”
只要 + 左边或右边出现字符串(包括隐式转换结果),整个表达式就切换为拼接模式。这不是 bug,而是语言设计——但容易在表单输入、API 返回值等场景中引发低级错误。养成对用户输入或外部数据先转类型的习惯,能省去大量调试时间。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











