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

JavaScript对象数组操作报错:Cannot read properties of undefined

问题排查与解决:Uncaught TypeError: Cannot read properties of undefined (reading 'hasOwnProperty')

错误根源

你遇到的类型错误,核心原因是动态访问对象属性时错误使用了点语法。JavaScript中,当属性名是变量(比如函数参数id)或非标准标识符的字符串(如"5439"),必须用方括号[]访问,而非点.。你的代码里collection.id会被解析为访问collection中名为id的固定属性,而非传入的id参数对应的记录,导致collection.id为undefined,调用hasOwnProperty自然触发报错。

代码中的具体问题

  1. 动态属性访问错误:所有collection.id的写法都要改成collection[id],因为id是动态参数。
  2. 删除属性语法错误:delete collection.id.prop同样错误,需改为delete collection[id][prop]。
  3. 空值判断逻辑错误:需求是“值为空字符串则删除属性”,但你判断的是value !== undefined,应改为value !== ""。
  4. tracks分支未处理空值:当value为空字符串时,没有删除tracks属性的逻辑,不符合需求。

修正后的完整代码

var collection = {
  "2548": {
    "album": "Slippery When Wet",
    "artist": "Bon Jovi",
    "tracks": [
      "Let It Rock",
      "You Give Love A Bad Name"
    ]
  },
  "2468": {
    "album": "1999",
    "artist": "Prince",
    "tracks": [
      "1999",
      "Little Red Corvette"
    ]
  },
  "1245": {
    "artist": "Robert Palmer",
    "tracks": []
  },
  "5439": {
    "album": "ABBA Gold"
  }
};

var collectionCopy = JSON.parse(JSON.stringify(collection));

function updateRecords(id, prop, value) {
  const record = collection[id];
  if (prop === "tracks") {
    if (value === "") {
      delete record.tracks;
    } else {
      // 存在tracks则push,不存在则创建数组
      record.tracks ? record.tracks.push(value) : record.tracks = [value];
    }
  } else {
    if (value === "") {
      delete record[prop];
    } else {
      record[prop] = value;
    }
  }
  return collection;
}

console.log(updateRecords("5439", "tracks", "Take a chance on me"));
// 输出:{... "5439": {"album": "ABBA Gold", "tracks": ["Take a chance on me"]} ...}

修正逻辑说明

  1. 先获取目标记录const record = collection[id],简化后续代码的属性访问。
  2. 处理tracks属性:
    • 若value为空字符串,直接删除该属性;
    • 若记录已有tracks数组,追加值;否则创建新数组并赋值。
  3. 处理其他属性:
    • 若value为空字符串,删除该属性;否则更新或添加属性值。
  4. 返回修改后的collection对象,符合所有需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:27:28