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

JavaScript报错Uncaught TypeError: Cannot set properties of undefined如何解决?

解决"Uncaught TypeError: Cannot set properties of undefined (setting '1')"错误

错误原因

  1. 数组层级初始化错误:你初始化的arry在循环push后是[[[[]]], [], []],当turn为1或2时,arry[turn]是空数组,访问arry[turn][i1]会得到undefined,此时尝试给undefined[i2]赋值就会触发报错。
  2. 数组扩展位置错误:当i2满5个元素时,你执行arry.push([])是给最外层数组添加元素,而不是给当前turn对应的二维数组添加新的行(一维数组),导致后续i1++后,arry[turn][i1]不存在,同样会出现undefined。

修复方案

  • 修正初始化逻辑:给arry的每个元素都初始化一个二维数组结构,确保arry[turn]始终是一个二维数组。
  • 修正数组扩展逻辑:当需要添加新行时,给当前turn对应的二维数组(arry[turn])push空数组,而不是最外层数组。

修改后的完整代码

var arry = [[[[]]]],
    i1 = 0,
    i2 = 0,
    intervalRate = 1000,
    turn = 0, a = 10, b = 5;

// 初始化另外两个二维数组,而非空数组
for(i = 0; i < 2; i++) arry.push([[]]);

setInterval(() => {
    // 防御性检查:确保当前turn对应的二维数组的第i1行存在
    if (!arry[turn][i1]) {
        arry[turn].push([]);
    }
    arry[turn][i1][i2] = [a, b];
    i2++;
    
    if(i2 % 5 === 0 && i2 !== 0){
        i1++;
        i2 = 0;
        // 给当前二维数组添加新行,对应i1++后的存储位置
        arry[turn].push([]);
    } 

    turn++;
    if(turn === 3) turn = 0;

    a += 5; b += 5;

}, intervalRate);

关键说明

  • 初始化时用arry.push([[]]),保证每个arry[turn]都是包含空一维数组的二维数组,确保第一次赋值arry[turn][0][0]有效。
  • 添加if (!arry[turn][i1]) { arry[turn].push([]); }做防御性检查,避免极端情况下i1超出当前行数导致的报错。
  • 将arry.push([])改为arry[turn].push([]),确保新行添加到当前操作的二维数组中,匹配i1++后的存储需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:46:03