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

TypeScript中遍历动态添加的对象属性无输出问题求助

解决for...in无法遍历Object.defineProperty添加的属性问题

问题出在Object.defineProperty的默认配置上——你当前添加属性时没有指定enumerable配置项,它的默认值是false,这意味着这些属性是不可枚举的,而for...in循环只会遍历对象的可枚举属性,所以自然输出为空。

两种解决方法:

1. 显式设置enumerable: true

在调用Object.defineProperty时,把enumerable设为true,让属性变成可枚举状态:

export interface IFilaActividad {
  [key: string]: any
}

var filaActividad: IFilaActividad = {}

this.columnsToDisplay.forEach(c => {
  Object.defineProperty(filaActividad, c, {
    enumerable: true, // 关键配置,开启可枚举
    value: undefined  // 可根据需求设置属性默认值,不写则为undefined
  });
});

2. 直接用对象赋值添加属性(更简洁)

如果不需要Object.defineProperty的高级特性(比如配置getter/setter、不可修改等),直接通过对象索引赋值的方式添加属性即可,这种方式添加的属性默认就是可枚举的:

export interface IFilaActividad {
  [key: string]: any
}

var filaActividad: IFilaActividad = {}

this.columnsToDisplay.forEach(c => {
  filaActividad[c] = undefined;
});

额外提示

如果不想遍历原型链上的属性,可以在for...in里搭配Object.hasOwn()过滤:

for (const key in filaActividad) {
  if (Object.hasOwn(filaActividad, key)) {
    console.log(key); // 只输出对象自身的可枚举属性
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:20:21