使用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
相关产品推荐
相关产品推荐

