评估 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 对象,放弃在配置中使用小辅助函数或条件的可能性本身。
如果你的变量是全局变量,你可以使用window
或this
(当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;
我有一些变数
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 对象,放弃在配置中使用小辅助函数或条件的可能性本身。
如果你的变量是全局变量,你可以使用window
或this
(当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;