JS使用for...in遍历对象累加数值型值时结果为0的原因求解
错误原因
- 你调用
Object.values(sumMe)的用法完全错误:这个方法返回的是包含sumMe所有属性值的数组,typeof判断数组返回的结果是object,永远不可能等于number,所以判断条件永远不成立,if内部的累加逻辑一次都没执行,total自然保持初始值0。 - 即使判断条件偶然成立,把整个数组加到total中也不会得到数值累加的效果,只会触发隐式类型转换把数组转成字符串拼接,完全不符合需求。
修复方案
for...in循环遍历对象时,你声明的循环变量本身就是当前遍历到的属性键,直接用sumMe[当前键]就能拿到当前键对应的值,判断这个值的类型后累加即可。
正确代码如下:
const sumMe = { hello: 'there', you: 8, are: 7, almost: '10', done: '!' }; let total = 0; // for...in 遍历逻辑 for (let key in sumMe) { const currentVal = sumMe[key]; if (typeof currentVal === 'number') { total += currentVal; } } console.log(total); // 输出结果为15,符合预期
内容的提问来源于stack exchange,提问作者iron21ww
相关产品推荐
相关产品推荐

