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

Angular中为何数组索引0可正常push,索引1报testresults未定义错误

问题根本原因

报错的核心是你给tests数组推入第二个元素时,入参结构写错,导致tests[1]不是预期的带testresults属性的对象。


具体错误拆解

  • tests的初始结构是对象数组,第一个元素tests[0]是符合预期的对象:

    // 初始赋值后,tests[0] 结构:
    {
      status: 0,
      testresults: [{ name: 'test', id: 1 }]
    }
    

    因此访问this.tests[0].testresults能拿到合法数组,执行push自然不会报错。

  • 你给tests推入第二个元素时,错误地将原本要推入的对象额外包了一层数组作为入参:
    你实际写的push逻辑等价于:

    // 错误写法:把对象包在数组里作为push入参
    this.tests.push( [ { status:1, testresults: [...] } ] );
    

    这就导致tests[1]的实际值是一个长度为1的数组(里面装着你要的status=1的对象),而非你预期的、直接带testresults属性的对象。

    你之所以觉得初始化逻辑“运行符合预期”,是因为push后tests的长度确实变成了2,但你没有校验第二个元素的实际结构——数组长度变化不代表元素结构符合预期。
    此时访问this.tests[1].testresults会得到undefined,对undefined执行push操作就会抛出你遇到的Cannot read property 'push' of undefined错误。

  • 附加问题:你写的push代码存在括号不匹配的语法冗余,这部分大概率是排版失误导致的,即使编译/运行时未触发语法错误,入参结构的错误依然存在。


正确写法

给tests推入元素时,直接传入目标对象即可,不要额外包裹数组:

this.tests.push({
  status: 1,
  testresults: [{
    name: 'test2',
    id: 2
  }]
});

修改后tests[1]就是符合结构的对象,后续对testresults的push操作可正常执行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 12:24:02