我有这个代码,有效:
function getSomeValue(property) {
var obj = {
lvl1: {
lvl2: {
lvl3: 'hi'
}
}
};
//Is it ok to use eval?
return eval('obj.' + property);
}
//I would like to return the value of obj.lvl1.lvl2.lvl3
getSomeValue("lvl1.lvl2.lvl3");
这是我第一次觉得需要使用eval。是eval邪恶吗?还有另一种快速实现这一目标的方法吗?
答案 0 :(得分:4)
您不必使用eval
,例如:
function getSomeValue(property) {
var obj = {
lvl1: {
lvl2: {
lvl3: 'hi'
}
}
},
arr = property.split('.');
return arr.reduce(function(a, b) {
return a[b];
}, obj);
}
document.write(getSomeValue("lvl1.lvl2.lvl3"));

答案 1 :(得分:1)
我个人认为这很好,因为你限制eval
d obj
中的内容。
当您运行从远程服务器或其他外部脚本上的AJAX调用派生的代码时,eval
的使用很糟糕。此外,此处window
对象没有变化或操纵,因此我没有看到问题。
假设您将代码作为字符串传递,您必须质疑是否需要这样做以及它为您的应用程序提供的价值。但我想,如果你愿意,为什么不呢。