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

Angular动态键赋值报错TypeError: Cannot read property of undefined求解决方案

解决动态赋值对象键时的"TypeError: Cannot read property of undefined"问题

这个错误的核心原因很明确:你试图给$scope.model.currentLoadedContent添加属性,但它(或者它的上层对象$scope.model)目前是undefined——在JavaScript里,你不能直接给一个未初始化的undefined对象设置属性。

下面是几种可行的解决方案:

1. 先初始化目标对象(最兼容的写法)

在执行赋值操作前,先确保$scope.model和$scope.model.currentLoadedContent都是有效的对象:

// 先检查并初始化$scope.model
if (!$scope.model) {
  $scope.model = {};
}
// 再检查并初始化currentLoadedContent
if (!$scope.model.currentLoadedContent) {
  $scope.model.currentLoadedContent = {};
}

// 你的赋值逻辑(这里优化了重复的Object.keys调用)
var contentList = Object.keys(content)[0];
$scope.model.currentLoadedContent[contentList] = content[contentList];

2. 使用ES6+语法简化初始化(环境支持时)

如果你的项目环境支持ES2020及以上的语法,可以用空值合并操作符(??)和可选链(?.)来简化代码:

var contentList = Object.keys(content)[0];

// 确保currentLoadedContent存在,不存在就初始化为空对象
$scope.model.currentLoadedContent = $scope.model.currentLoadedContent ?? {};
// 完成赋值
$scope.model.currentLoadedContent[contentList] = content[contentList];

// 甚至可以写成一行更简洁的形式
($scope.model?.currentLoadedContent ??= {})[contentList] = content[contentList];

注意:AngularJS项目如果是较老的版本,可能需要配置Babel来支持这些新语法。

3. 额外的边界检查(避免content为空的情况)

还要确保content不是空对象,否则Object.keys(content)[0]会返回undefined,可能引发新的问题:

// 先判断content是否有可枚举属性
if (Object.keys(content).length === 0) {
  console.warn("content对象为空,无法获取键");
  return; // 或者做其他处理
}

// 再执行后续的初始化和赋值逻辑
var contentList = Object.keys(content)[0];
// ... 初始化currentLoadedContent的代码
$scope.model.currentLoadedContent[contentList] = content[contentList];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:35:14