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

为何JavaScript中for-in循环无法正确获取数组内类实例变量值?

问题原因

你遇到的NaN问题核心在于**for-in循环遍历数组时,循环变量拿到的是数组的索引字符串,而非数组元素本身**。

比如你的代码里,obj的值是"0"、"1"、"2"这类字符串,这些字符串没有foo属性,所以obj.foo返回undefined。当你执行total += undefined时,0 + undefined会变成NaN,后续所有累加操作都会保持NaN,最终输出结果就是NaN。

解决方法

推荐用以下几种方式遍历数组元素:

1. 使用for-of循环(ES6+)

直接遍历数组的元素,是遍历数组最直观的方式:

var total = 0;
for (const obj of classArray) {
    total += obj.foo;
}

2. 使用传统for循环

和你填充数组时用的循环逻辑一致,通过索引访问数组元素:

var total = 0;
for (let i = 0; i < classArray.length; i++) {
    total += classArray[i].foo;
}

3. 使用数组forEach方法

利用数组的内置方法遍历,写法更简洁:

var total = 0;
classArray.forEach(obj => {
    total += obj.foo;
});
额外说明

for-in的设计初衷是遍历对象的可枚举属性,虽然它能遍历数组的索引,但不适合用来遍历数组元素——因为它会遍历数组原型链上的自定义属性,可能导致意外的遍历结果,所以数组遍历优先用上面几种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:45:55