javascript - 检查是否定义了对象名称为字符串的对象

标签 javascript

有没有一种方法可以不使用 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() 但还没有找到另一种方法来检查当对象名称作为字符串传递时对象是否未定义。

最佳答案

假设这些是全局变量(IE 未在内部函数范围内定义),您可以拆分句点并使用括号表示法。

有点像

function isDefined(name, obj){
   if(!obj){
      obj = window;
   }
   var pathArr = name.split(".");
   obj = obj[pathArr.splice(0,1)];
   if(typeof obj !== undefined){

     return pathArr.length ? isDefined(pathArr.join("."),obj): true;
   }

   return false;


}

请注意,除非您尝试编写 requireJS 替代品,否则这几乎总是一个坏主意。检查值是否存在于您调用函数的上下文中,如果存在则传入值,否则传入 null/undefined/some default value。如果您不控制传递的上下文,请询问对象,然后检查它们是否已定义。

关于javascript - 检查是否定义了对象名称为字符串的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15910385/

相关文章:

javascript - Angular 查询参数中的句点

javascript - 插入 div 作为 .lastElementChild 没有 'insertBefore' 没有 jQuery

javascript - 文件结构首选项

javascript - 用于验证文本框长度的正则表达式

javascript - 在 Bootstrap 模式中调用时,工作 "Copy to Clipboard"函数不起作用

javascript - 显示 div onscroll 但永久隐藏 div onclick

javascript - 如何解决 Less error "Uncaught (in promise) TypeError: Cannot read property ' 1' of null"

javascript - 黑洞请求 Cakephp

javascript - 使用 debug-brk 启动 Sails 不会运行 Grunt?

javascript - 未指定暗淡时图像不会填充 Canvas