评估 javascript 中的字符串而不评估

Evaluate string in javascript without eval

我有一些变数

var a = true;
var b = false;
var c = true;

和一个数组

var array = ['a', 'b', 'c'];

如何将元素评估为其相应的真值?

我知道我可以使用 eval(),但由于它被认为是有害的,还有其他选择吗?

在某些情况下,我宁愿将 'truth' 分配为

var truth = {'a': true, 'b': false, 'c': true};

而且 eval() 似乎没有其他选择(例如 eval('a+b', {a: 1, b: 3}) = 4

不幸的是,

Javascript 只提供了 eval,它适用于程序员无法控制的范围(在 Python 中,您可以提供应该是全局和局部的范围环境)。

要实现您的目标,解决方案是实现您自己的语言。这似乎是一件大事,但实际上它可能是可行的,甚至是合理的,具体取决于您的需要。

如果通常只是配置需要,Javascript 世界中的解决方案是使用单个 JSON 对象,放弃在配置中使用小辅助函数或条件的可能性本身。

如果你的变量是全局变量,你可以使用windowthis(当this指向window对象时)。

var a = true;
var b = false;
var c = true;
var array = ['a', 'b', 'c'];
for(var i = 0; i < array.length; i++){
  console.log(this[array[i]]);
}

虽然这不能回答您的问题,但它应该可以满足您的需求。

您可以将它们设为本地对象的属性,然后使用它们。

var obj = {
   a: true,
   b: false,
   c: true
};

var array = ['a', 'b', 'c'];

array.forEach(function(val) {
  console.log("Value ", val, "is ", obj[val]);
});

由于事物的命名方式,您还可以访问

obj.a = false;

obj["b"] = true;