javascript加号运算符优先字符串拼接:任一操作数为字符串时,另一操作数转字符串后拼接;否则全转数字再相加。如5+"3"→"53",1+2+"3"→"33",+"1"+2→3。

JavaScript 中加号(+)是唯一一个既可作算术加法、又可作字符串拼接的运算符,它的行为取决于操作数的类型。当涉及字符串与数值混合时,JavaScript 会按特定规则进行隐式转换,而不是统一转为数字或统一转为字符串。
加号运算符的类型判断优先级
遇到 + 运算时,JavaScript 按以下顺序判断行为:
- 如果**任意一个操作数是字符串**,则将**另一个操作数转为字符串**,然后执行字符串拼接;
- 否则(两个都不是字符串),尝试将两个操作数都转为数字,再执行数值相加。
注意:这里的“字符串”指原始字符串类型(string),不是字符串对象(new String('1')),但后者在多数情况下也会被当作字符串处理。
常见隐式转换示例
以下例子清晰体现规则:
-
5 + "3"→"53"(数字转字符串后拼接) -
"3" + 5→"35"(同上,顺序不影响结果) -
1 + 2 + "3"→"33"(从左到右计算:1+2=3,再3+"3"→"33") -
"1" + 2 + 3→"123"("1"+2→"12",再"12"+3→"123") -
+"1" + 2→3(一元加号强制转数字,+"1" === 1,所以是数值相加)
如何避免意外拼接?
当本意是数值计算却混入字符串时,容易出错。推荐做法:
- 用
Number()、parseInt()或parseFloat()显式转换字符串为数字; - 用
String()或模板字符串`${value}`显式转为字符串; - 对用户输入等不可信数据,先校验再转换,例如:
const n = Number(input); if (isNaN(n)) throw new Error("无效数字");
特殊值的处理细节
一些边界情况需留意:
-
null转字符串是"null",转数字是0;所以null + "1"→"null1",而+null + 1→1; -
undefined转字符串是"undefined",转数字是NaN;undefined + "1"→"undefined1"; -
true / false转数字分别是1 / 0,转字符串是"true" / "false";所以true + "1"→"true1",true + 1→2。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











