有没有办法在不使用eval()
的情况下执行以下操作?检查对象是否定义在对象名字符串中
以下函数接受字符串数组,其中的字符串是对象名称。我遍历它们以确保它们都不是未定义的。我希望能够做到这一点,而无需使用eval()
function hasMissingDependencies(dependencies) {
var missingDependencies = [];
for (var i = 0; i < dependencies.length; i++) {
if (eval('typeof ' + dependencies[i]) === 'undefined') {
missingDependencies.push(dependencies[i]);
}
}
if (missingDependencies.length > 0) {
return true;
}
return false;
}
有了这个,我能够通过类似下面的,并得到了我想要的:
alert(hasMissingDependencies(['App.FooObject', 'App.BarObject']));
我宁愿不使用eval()
,但还没有找到另一种方法来检查对象名称作为字符串传递时是否未定义对象。
为什么你需要将它们作为字符串传递? – 2013-04-09 19:04:08
我不知道另一种方法来传递**可能未定义到另一个函数的对象名称。例如,调用'hasMissingDependencies(App.FooObject,App.BarObject)'如果其中任何一个对象没有被定义,就会在它进入函数之前抛出一个错误。我错过了什么吗? – Jared 2013-04-09 19:11:29
你从哪里通过它?你可以看到我的答案是一个可能的解决方案,但是在你传递它们之前检查它们是否存在,然后传递null或者其他一些值,如果不存在,会更简单。 – 2013-04-09 19:13:24