数组语句出现Uncaught TypeError,空数组时报错如何解决?
解决空数组场景下的TypeError问题
错误原因
当ovens_init[i]是空数组时,ovens_init[i][0]的值为undefined,此时尝试读取undefined的length属性就会抛出Uncaught TypeError: Cannot read properties of undefined (reading 'length')。
修复方案
你可以在读取length前先检查ovens_init[i][0]是否存在,或者使用可选链操作符简化判断,以下是两种可行的修改方式:
方式1:添加存在性判断(兼容所有JS环境)
//Initial Array for ovens var ovens_init = new Array(); ovens_init[1] = []; ovens_init[2] = []; ovens_init[3] = []; ovens_init[4] = []; ovens_init[5] = []; //Figures out the max length of the inital arrays var oven_max_length = 0; for (i = 1; i < 6; i++){ // 先判断子数组的第一个元素是否存在,再比较长度 if(ovens_init[i][0] && ovens_init[i][0].length > oven_max_length){ oven_max_length = ovens_init[i][0].length; } }
方式2:使用可选链操作符(ES2020及以上环境支持)
可选链操作符?.会在左侧值为undefined或null时直接返回undefined,配合|| 0可以将不存在的情况转为0,避免报错:
//Initial Array for ovens var ovens_init = new Array(); ovens_init[1] = []; ovens_init[2] = []; ovens_init[3] = []; ovens_init[4] = []; ovens_init[5] = []; //Figures out the max length of the inital arrays var oven_max_length = 0; for (i = 1; i < 6; i++){ const currentLength = ovens_init[i][0]?.length || 0; if(currentLength > oven_max_length){ oven_max_length = currentLength; } }
说明
两种方案都能确保当子数组为空时,不会触发读取undefined属性的错误,程序可以正常运行并计算出正确的最大长度(空数组场景下最大长度为0)。
内容的提问来源于stack exchange,提问作者Cold
相关产品推荐
相关产品推荐

