JavaScript中for循环访问对象数组键值报Cannot read property 'x' of undefined错误
错误原因
- JavaScript数组的索引从0开始,合法索引范围为
0到objects.length - 1。你代码中的循环条件写为i <= objects.length,当i等于objects.length时,objects[i]的值为undefined,尝试读取undefined的x属性就会触发TypeError: Cannot read property 'x' of undefined报错。
比如你给出的示例数组长度为5,合法索引只有0、1、2、3、4,当i自增到5时就会触发越界访问。
修复方案
方案1:修正循环判断条件
将循环条件中的<=改为<即可解决下标越界问题:
function getCount(objects) { let counter = 0; for(let i = 0; i < objects.length; i++) { if (objects[i]['x'] == objects[i]['y']) { counter ++; } } return counter; }
运行该函数处理你的示例数组,返回结果为2,符合预期。
方案2:用数组遍历方法避免手动维护下标
你也可以使用reduce、filter等数组原生方法,不需要手动控制下标,从根源上避免越界问题:
// reduce 实现版本 function getCount(objects) { return objects.reduce((count, cur) => cur.x === cur.y ? count + 1 : count, 0) } // filter 实现版本 function getCount(objects) { return objects.filter(item => item.x === item.y).length }
内容的提问来源于stack exchange,提问作者Pratham Dave
相关产品推荐
相关产品推荐

