代码之家  ›  专栏  ›  技术社区  ›  Austin

动态引用属性时未定义JS-ReferenceError

  •  0
  • Austin  · 技术社区  · 5 年前

    我试图引用一个动态设置的变量的属性。当第一个console.log行使用vars[sv.name]运行时,它输出正确的结果。当我在eval语句中进一步引用vars[]时,会得到ReferenceError。

    vars = {};
            // Get the array of current variables 
            if (cache[msg.guild.id]) {
                cache[msg.guild.id].variables.forEach(sv => {
                    if (sv.type == 'Text' || sv.type == 'Number') {
                        vars[sv.name] = sv.value;
                        console.log(vars[sv.name] + ' ' + sv.name);
                    }
                });
                console.log(vars);
                Object.keys(action).forEach(e => {
                    try {
                        var newVal = eval('`' + action[e] + '`');
                        action[e] = newVal;
                    }
                    catch(err) {
                        console.log(err);
                    }
                     //console.log(`key=${e}  value=${action[e]}`)
                });
            }
    

    我得到的错误是:“ReferenceError:c未定义”,其中“c”是属性名。

    { c: 'ok' }

    下面是cache变量中的内容:

    { 
        variables: [ { name: 'c', value: 'ok', type: 'Text' } ] 
    }
    

    以及 action[e] ${vars[c]}

    1 回复  |  直到 5 年前
        1
  •  0
  •   PeterVC    5 年前

    这里有一个沙箱,用来运行“eval”代码。出于安全原因,有一个单独的范围。