JavaScript中空字符串下加法赋值与加法运算符的差异解析
空字符串场景下
+=与+的输出差异解析 这两段代码输出不同的核心原因,是运算符优先级和JavaScript的隐式类型转换共同作用的结果,咱们一步步拆解来看:
第一段代码分析
var point = ''; point = '' + 12 + 34; console.log(point); // 输出 "1234"
JavaScript里的二元+运算符是左结合的,运算顺序从左到右:
- 首先执行
'' + 12:因为其中一个操作数是字符串,JavaScript会触发字符串拼接的隐式转换,把数字12转为字符串"12",得到结果"12"; - 接着执行
"12" + 34:同样,字符串和数字相加时数字会被转为字符串,最终拼接成"1234"; - 最后把这个结果赋值给
point,所以控制台输出字符串"1234"。
第二段代码分析
var point = ''; point += + 12 + 34; console.log(point); // 输出 "46"
这里的关键是要区分一元正号运算符+和二元加法/拼接运算符+,以及它们的优先级差异:
- 一元正号运算符
+的优先级高于二元+,所以先执行+12:这个操作是把值转为数字(这里12本身就是数字,结果还是12); - 然后执行
12 + 34:两个数字相加,结果是数字46; - 最后执行
point += 46:+=是赋值运算符,它会把右侧的数字46和左侧的空字符串''进行拼接(因为左侧操作数是字符串,触发字符串转换),最终point被赋值为字符串"46",所以控制台输出这个结果。
额外补充:+=和直接+赋值的本质关联
如果把第二段代码改成下面这样,结果会和第一段完全一致:
var point = ''; point = point + 12 + 34; console.log(point); // 输出 "1234"
这说明+=本身和point = point + ...的逻辑是一致的,只是你第二段代码里的+ 12是一元运算符,改变了右侧表达式的运算顺序,才导致了不同的输出。
内容的提问来源于stack exchange,提问作者dieuhd
相关产品推荐
相关产品推荐

