加号(+)在JavaScript中具有数值相加和字符串拼接双重行为,遵循“字符串优先”规则:任一操作数为字符串即触发拼接,从左到右执行;其余算术运算符(-、*、/、%)则强制转数字,失败返回NaN。

JavaScript 中算术运算符(如 +、-、*、/、%)在遇到非数字类型时,会按规则进行隐式类型转换。理解这些规则,能避免常见计算错误,比如 "5" + 2 得到 "52" 而不是 7。
加法(+)是特例:可能做字符串拼接
加法运算符 + 是唯一一个对字符串有“优先拼接”行为的算术运算符。只要左右任一操作数是字符串,整个表达式就转为字符串拼接;否则才执行数值相加。
-
"3" + 4→"34"(字符串优先) -
3 + "4"→"34" -
3 + 4 + "5"→"75"(从左到右,3+4=7,再7+"5") -
3 + true→4(true转为1,非字符串,走数值路径)
其他算术运算符(- * / %)强制转为数字
减法、乘法、除法、取余一律尝试将操作数转为数字(使用 ToNumber 抽象操作),失败则得 NaN。
-
"5" - "2"→3(两边转为5和2) -
"5" * "2"→10 -
"hello" - 1→NaN("hello"转数字失败) -
null - 1→-1(null转为0) -
undefined * 2→NaN(undefined转数字为NaN)
常见值转数字的规则要记牢
隐式转换依赖底层 ToNumber 规则,关键几个:
立即学习“Java免费学习笔记(深入)”;
-
""(空字符串)→0 -
" 42 "→42(自动忽略首尾空白) -
"42px"→NaN(含非法字符,无法解析为有效数字) -
true→1,false→0 -
null→0,undefined→NaN -
[](空数组)→0(先转字符串"",再转数字0) -
[1]→1([1].toString()是"1",再转数字) -
[1,2]→NaN("1,2"无法转为单一数字)
如何安全避免隐式转换陷阱
生产代码中,推荐显式控制类型,而不是依赖隐式行为:
- 用
Number(x)或一元加号+x显式转数字(+"42"→42) - 用
parseInt(x, 10)或parseFloat(x)处理带单位或小数的字符串 - 加法前统一转数字:
Number(a) + Number(b),防止意外拼接 - 用
typeof x === 'number' && !isNaN(x)校验是否为有效数字 - 开启 ESLint 规则如
no-plusplus(慎用++)、no-implicit-coercion可提示潜在隐式转换


















