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

使用Object.defineProperty()修改JavaScript属性时触发TypeError错误求助

问题分析与修复

错误根源

你遇到的TypeError核心原因是数组元素访问方式错误:

  • obj是数组类型,你直接写obj.key3完全错误——数组的元素只能通过数字索引访问,key3是数组第三个元素(索引为2)内部的属性,因此obj.key3的值是undefined。
  • Object.defineProperty的第一个参数必须是合法对象,传入undefined就会触发这个类型错误。
  • 额外问题:forEach循环完全多余,你要修改的是数组内的特定元素,循环三次只会重复执行无效操作;最后console.log(obj.prop1)也是错误的,因为你把prop1定义在key3对象上,而非obj本身。

修复后的代码

// 建议用const声明变量,避免全局变量污染
const obj = [{
    prop11: 'value1',
    prop21: 'value2'
  },
  {
    prop12: 'value1',
    prop22: 'value2'
  },
  {
    key3: {}
  }
];

// 正确访问数组内的key3对象,添加prop1属性
Object.defineProperty(obj[2].key3, 'prop1', {
  value: "xx",
  writable: true,
  enumerable: true,
  configurable: true
});

// 正确打印目标属性的值
console.log(obj[2].key3.prop1); // 输出: xx

简化写法(无需精细控制属性特性时)

如果不需要自定义writable/enumerable/configurable这些属性特性(默认值已满足大部分场景),可以直接赋值:

obj[2].key3.prop1 = "xx";
console.log(obj[2].key3.prop1); // 输出: xx

内容的提问来源于stack exchange,提问作者Vijay G Rama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 12:37:06