访问二维数组索引时出现Variable no asigned变量未赋值报错如何解决?
报错原因
你的代码触发报错的核心原因是数组索引越界访问:
示例中vertices数组总长度为4,合法索引范围是0 ~ 3。循环执行到最后一轮时i = 3,此时尝试访问vertices[i + 1][0]等价于访问vertices[4][0],但vertices[4]本身不存在,返回值为undefined,尝试读取undefined的0索引属性时就会触发类型错误,你看到的变量未赋值报错本质是该异常的描述偏差。
修复方案
以下两种方案可按需选择:
- 方案1:调整循环边界,确保
i+1始终落在合法索引范围内,适合业务逻辑需要成对遍历相邻元素的场景
let vertices = [ [1, 10], [2, 20], [3, 30], [1, 10], ]; // 循环终止条件改为长度减1,i最大取值为2,i+1最大为3,不会越界 for (let i = 0; i < vertices.length - 1; i++) { console.log(vertices[i][1]); console.log(vertices[i + 1][0]); }
- 方案2:访问下一级索引前增加存在性判断,适合不需要严格成对遍历的场景
let vertices = [ [1, 10], [2, 20], [3, 30], [1, 10], ]; for (let i = 0; i < vertices.length; i++) { console.log(vertices[i][1]); // 先判断i+1对应的元素是否存在,再读取属性 if(vertices[i + 1]) { console.log(vertices[i + 1][0]); } }
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

