You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中空字符串下加法赋值与加法运算符的差异解析

空字符串场景下+=与+的输出差异解析

这两段代码输出不同的核心原因,是运算符优先级和JavaScript的隐式类型转换共同作用的结果,咱们一步步拆解来看:

第一段代码分析

var point = ''; 
point = '' + 12 + 34; 
console.log(point); // 输出 "1234"

JavaScript里的二元+运算符是左结合的,运算顺序从左到右:

  1. 首先执行'' + 12:因为其中一个操作数是字符串,JavaScript会触发字符串拼接的隐式转换,把数字12转为字符串"12",得到结果"12";
  2. 接着执行"12" + 34:同样,字符串和数字相加时数字会被转为字符串,最终拼接成"1234";
  3. 最后把这个结果赋值给point,所以控制台输出字符串"1234"。

第二段代码分析

var point = ''; 
point += + 12 + 34; 
console.log(point); // 输出 "46"

这里的关键是要区分一元正号运算符+和二元加法/拼接运算符+,以及它们的优先级差异:

  1. 一元正号运算符+的优先级高于二元+,所以先执行+12:这个操作是把值转为数字(这里12本身就是数字,结果还是12);
  2. 然后执行12 + 34:两个数字相加,结果是数字46;
  3. 最后执行point += 46:+=是赋值运算符,它会把右侧的数字46和左侧的空字符串''进行拼接(因为左侧操作数是字符串,触发字符串转换),最终point被赋值为字符串"46",所以控制台输出这个结果。

额外补充:+=和直接+赋值的本质关联

如果把第二段代码改成下面这样,结果会和第一段完全一致:

var point = '';
point = point + 12 + 34;
console.log(point); // 输出 "1234"

这说明+=本身和point = point + ...的逻辑是一致的,只是你第二段代码里的+ 12是一元运算符,改变了右侧表达式的运算顺序,才导致了不同的输出。

内容的提问来源于stack exchange,提问作者dieuhd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:59:11