【发布时间】:2019-08-12 14:25:30
【问题描述】:
我正在尝试引用动态设置的变量的属性。当第一个 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 is not defined”,其中“c”是属性名称。
这是我引用的对象的样子:
{ c: 'ok' }
这是缓存变量中的内容:
{
variables: [ { name: 'c', value: 'ok', type: 'Text' } ]
}
在这种情况下action[e] 是:${vars[c]}
【问题讨论】:
-
我不清楚这里的意图是什么。为什么需要
eval动作的内容?你需要做的就是得到一个键的值,为什么不把"c"存入actions[e]然后做vars[action[e]]呢?或者使用标记模板或其他东西。至少可以说,当前的系统看起来很奇怪。 -
c 只是属性名称,它对应于来自用户输入的字符串。由于它来自用户输入,并且字符串中可能有任意数量的这些变量,我不能使用模板
标签: javascript node.js