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

JavaScript中如何用for循环遍历类实例动态初始化的变量名和值

问题场景

我正在开发一款解释器,可从文本文件中读取如下格式的变量配置内容:

variable1: 2
variable2: 400
variable3: 31

目前我借助eval()和正则表达式在运行时完成变量初始化,相关实现代码如下:

class Rules{
    getSegmentArgs_string(sgmnt, scope)
    {
        let argarray = new Array;
        let vardeclaration;
        for(let i=0; i<this.rules[sgmnt].length; i++)
        {
            let regexp = /(\w+): ([0-9\.]+)/g;
            for (const match of this.rules[sgmnt][i].matchAll(regexp)) {
                vardeclaration = (scope+match[1].toString() + " = "+match[2].toString()+";");
                argarray[i] = vardeclaration;
            }
        }
        return argarray;
    }
    setSegment(sgmnt)
    {
        this.segment = sgmnt;
    }
    init()
    {
        this.defaultvars = this.getSegmentArgs_string(this.segment,"this.")
        for(let i=0; i<this.defaultvars.length; i++)
        {
            eval(this.defaultvars[i]);
        }
        delete(this.rules);
        delete(this.defaultvars);
        delete(this.segment);
    }
    constructor() {
        this.rules = this.dump();
    }
}
let rules = new Rules;
rules.setSegment(3);
rules.init();

现在遇到的问题是:初始化完成后,我无法通过for循环访问这些动态生成的变量,批量输出每个变量的名称及其对应值。我之前尝试编写的遍历代码如下,运行后无法得到正确结果:

for (const variables in rules)
{
          console.log({variales});
          console.log({variables}.value);
}

我可以通过硬编码变量名的方式正常访问变量值:

console.log(rules.variables1,rules.variables2,rules.variables3)

但受任务性质限制,我不能硬编码变量名,需要通过循环遍历的方式获取所有动态生成的变量。

解决方法

你写的遍历代码有两处错误:

  • 存在拼写错误:{variales} 漏写了字符,正确的变量名是variables
  • 取值逻辑错误:for...in循环遍历对象时,拿到的是对象的属性名字符串,要获取对应属性值需要用方括号取值语法对象[属性名],你写的{variables}.value是无效语法。

直接替换成如下遍历代码即可正常输出所有动态变量:

for (const varName in rules) {
  console.log('变量名:', varName);
  console.log('变量值:', rules[varName]);
}

你的init方法执行时已经手动删除了rules、defaultvars、segment这几个内部属性,遍历rules实例得到的可枚举属性全是你从配置文件解析出来的动态变量,不会混入其他内部字段。

如果后续需要给Rules类新增其他实例方法或属性,怕遍历的时候混入非配置变量,可以在解析变量阶段单独维护一个配置变量名列表,遍历的时候只读取列表里的字段即可,逻辑会更稳妥。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:51:23