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

初始化对象时访问内部索引触发Uncaught TypeError如何解决?

问题分析与解决方案

报错原因

你在定义state[id]对象的过程中,state[id]还未完成赋值(此时state[id]是undefined),就尝试通过state[id].house访问内部属性,自然会抛出"Cannot read properties of undefined"的错误。

可行解决方案

方案1:先将house存为变量,再构建对象

先把house对象单独定义为变量,这样在创建car时可以直接引用这个变量,避免依赖未初始化的state[id]:

var state = {}
function init(id) {
    const house = {
        'test': ['hi', 'hey']
    };
    state[id] = {
        house,
        car: {
            output: house['test'][0]
        }
    }
}
init(1);

方案2:使用getter延迟属性计算

通过get关键字定义car,这样只有当你访问car属性时,才会执行内部逻辑,此时state[id].house已经存在:

var state = {}
function init(id) {
    state[id] = {
        house: {
            'test': ['hi', 'hey']
        },
        get car() {
            return {
                output: this.house['test'][0]
            }
        }
    }
}
init(1);
// 访问方式:state[1].car.output

方案3:分步初始化对象

先创建包含house的基础对象,再补充car属性,此时state[id]已经存在,可以正常访问house:

var state = {}
function init(id) {
    state[id] = {
        house: {
            'test': ['hi', 'hey']
        }
    };
    state[id].car = {
        output: state[id].house['test'][0]
    };
}
init(1);

为什么之前的尝试无效

  • this.state[id].house:函数内的this指向全局对象,虽然能拿到state,但state[id]仍未初始化,问题本质没变。
  • this.house/house:对象字面量中,this不指向正在创建的对象;直接写house会被当作独立变量,而非对象属性,所以无法访问到目标值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:07:10