JS中do...while循环为何CODE A返回数字序列CODE B返回求和结果?
问题原因解释
这个差异本质是JavaScript中+运算符的重载规则,会根据操作数的类型判断执行逻辑:
- CODE A的逻辑:
counter的初始值是空字符串'',属于字符串类型。每次执行counter = counter + i时,JS会自动将数值类型的i转为字符串,执行字符串拼接逻辑,所以循环结束后得到的是1到14依次拼接的数字序列。 - CODE B的逻辑:
counter的初始值是数值4,属于数字类型。每次执行counter = counter + i时,两边操作数都是数字类型,+会执行算术加法逻辑。
可以手动计算验证结果:1到14的累加和为(1+14)*14/2=105,加上初始的4刚好是109,和输出结果完全匹配。
补充说明:JavaScript属于弱类型语言,运算符执行前会隐式做类型转换,除了
+之外,-、*、/等运算符都会默认把操作数转成数值再做算术运算,只有+存在字符串拼接和数值加法两种重载逻辑。
内容的提问来源于stack exchange,提问作者Ikenna
相关产品推荐
相关产品推荐

