有沒有辦法在不使用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