js算术运算符中,加号(+)唯一支持字符串拼接,其余运算符一律强制转数字;加号遵循“字符串优先”,如"5"+2得"52";减、乘、除、取余调用tonumber,失败则返回nan;注意浮点精度与边界行为。

JS 中算术运算符的正确使用,关键在于理解每种运算符对数据类型的处理逻辑,尤其要区分 加号(+)的双重行为 和其余运算符的强制转数字机制。不注意这点,很容易写出看似合理却结果异常的代码,比如 "5" + 2 得到 "52" 而不是 7。
加号(+):唯一会做字符串拼接的算术运算符
它不是“先转数字再相加”,而是遵循“字符串优先”规则:
- 只要左右任一操作数是字符串,整个表达式就按字符串拼接执行
- 拼接从左到右进行,中间结果会影响后续操作:
3 + 4 + "5"→ 先算3 + 4得7,再7 + "5"得"75" - 布尔值、
null、undefined等在非字符串上下文中会被转为数字(如true → 1,false → 0,null → 0,undefined → NaN),但一旦参与拼接,就走字符串路径:"1" + true→"1true"
减、乘、除、取余(- * / %):一律尝试转成数字
这些运算符不会拼接,而是调用内部 ToNumber 规则转换操作数:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
-
"10" - "3"→7(两个字符串都成功转为数字) -
"10" * "abc"→NaN("abc"转数字失败) -
5 % "2"→1("2"转为2后取余) -
null - 1→-1(null转为0),但undefined - 1→NaN
注意除法和取余的特殊行为
除法 / 和取余 % 在边界情况有明确定义:
-
10 / 0→Infinity,-10 / 0→-Infinity,0 / 0→NaN -
%的结果符号只取决于左边操作数:-7 % 3→-1,7 % -3→1 - 浮点数精度问题普遍存在:
0.1 + 0.2 !== 0.3,0.07 * 100可能得7.000000000000001,做等值判断或取整前建议用Math.round()或容差比较
自增/自减和复合赋值也依赖类型转换
虽然它们不是基础算术运算符,但行为紧密相关:
-
++和--会先将操作数转为数字再运算,"5"++报错(因为字符串不可变),但let a = "5"; a++会把a先转成5再自增为6 - 复合赋值如
+=在左操作数为字符串时仍按拼接处理:let s = "a"; s += 1→"a1";但-=就一定走数字路径:let n = "10"; n -= 3→7










