JavaScript中+运算符遇字符串优先拼接:只要一个操作数是字符串,另一操作数即转字符串后拼接,如5+"3"→"53";而-、*等其他算术运算符则尝试将字符串转为数字运算。

JavaScript 中 Number 与字符串相加时,不会把数字转成数字再运算,而是把数字转成字符串,然后做字符串拼接。
加号(+)的双重角色
JavaScript 的 + 运算符既可做数值相加,也可做字符串拼接。当操作数中**只要有一个是字符串**,整个表达式就按字符串拼接处理。
-
5 + "3"→"53"(数字5被隐式转为字符串"5") -
"hello" + 42→"hello42" -
0 + ""→"0"(注意:0转字符串是"0",不是空字符串)
转换顺序:先转字符串,再拼接
这个过程不是“先尝试相加,失败再拼接”,而是由类型优先级决定:字符串具有更高优先级。引擎会依次检查操作数类型,一旦发现字符串,立即启动 ToString 抽象操作,把另一个操作数也转成字符串。
-
null + "x"→"nullx"(null转字符串是"null") -
undefined + "y"→"undefinedy" -
true + "1"→"true1"(布尔值也转字符串,不是"11")
和减号(-)、乘号(*)等运算符的区别
只有 + 有这种“字符串优先”的行为。其他算术运算符(如 -、*、/、%)遇到字符串时,会尝试用 ToNumber 把字符串转为数字。
立即学习“Java免费学习笔记(深入)”;
-
5 - "3"→2("3"转为数字3) -
"5" * "3"→15 -
"hello" - 1→NaN("hello"无法转为有效数字)
如何避免意外拼接
如果本意是数值相加,但其中一个操作数可能为字符串,应主动转换类型:
- 用
Number(str)或一元加号+str转字符串为数字 - 用
parseInt(str, 10)或parseFloat(str)处理带格式的数字字符串 - 用
String(num)或num.toString()明确转字符串(当真要拼接时)


















