JavaScript报错:Cannot read properties of undefined (reading '0')排查求助
错误原因排查与解决方法
未捕获的类型错误:无法读取undefined的属性(读取'0')
在HTMLButtonElement.store_val1 (Intersection.html:84:46)
store_val1 @ Intersection.html:84
触发报错的代码:
for (var i = 0; i < arr3.length; i++) { for (var j = 0; j < arr3.length; j++) { for (var k = 0; k < arr3.length; k++) { a = arr3[i][j]; b = arr3[i + 1][k]; // 84:46 console.log(b); if (a == b) { arr4.push(a); console.log('Yes'); // j++; } } k = 0; } j = 0; }
错误原因
报错核心出在arr3[i + 1][k]这一行:
数组索引从0开始,当外层循环的i走到arr3.length - 1时,i + 1等于arr3.length,此时arr3[i + 1]是数组越界位置,值为undefined。试图读取undefined的第k个索引,就会抛出“无法读取undefined的属性'0'”的错误。
解决方法
修改外层循环的终止条件,确保i + 1不会超出数组最大索引范围:
for (var i = 0; i < arr3.length - 1; i++) { for (var j = 0; j < arr3.length; j++) { for (var k = 0; k < arr3.length; k++) { a = arr3[i][j]; b = arr3[i + 1][k]; console.log(b); if (a == b) { arr4.push(a); console.log('Yes'); // j++; } } } }
额外优化
代码里手动重置j = 0和k = 0属于冗余操作——for循环每次迭代都会重新初始化j和k的值,删掉这些代码不影响逻辑,还能让代码更简洁。
内容的提问来源于stack exchange,提问作者Crazy Programmer
相关产品推荐
相关产品推荐

