在没有eval的情况下在javascript中评估字符串

时间:2016-09-10 05:59:48

标签: javascript eval

我有一些变数

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

和一个数组

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

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

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

在某些情况下,我宁愿将“真相”分配为

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

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

3 个答案:

答案 0 :(得分:1)

虽然这并没有回答你的问题,但它应该做你需要做的事情。

不是制作这些变量,而是将它们作为本地对象的属性 - 然后使用它们。

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;

答案 1 :(得分:0)

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

要实现您想要的目标,解决方案就是实现您自己的语言。这可能看起来很重要,但实际上它可能是可行的,甚至是合理的,这取决于你需要它。

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

答案 2 :(得分:0)

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

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]]);
}