检查对象名称为string的地方是否定义了object
Check if object is defined where object name is string
有没有办法在不使用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()
,但还没有找到另一种方法来检查当对象名称作为字符串传递时对象是否未定义
假设这些都是全局变量(即不在内部函数作用域内定义),您可以按句号分隔并使用括号标记。
比如
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/一些默认值,则传递这些值。如果你不控制传递的上下文,请求对象,然后检查它们是否被定义。
您似乎想检查其名称在您的数组中是否被定义的全局变量。
您可以构建一个简单的函数来获取这些变量:
function getVar(name) {
var v = window, path=name.split('.');
while (path.length>0 && v) v = v[path.shift()];
return v;
}
允许你测试
if (typeof getVar(dependencies[i]) === 'undefined')
相关文章:
- 检查是否定义了数组中的值
- 此比较行为是否定义良好
- 是否定义值的角度ng重复
- 检查是否定义了javascript对象/属性
- 流星:检查是否定义了集合
- Javascript - 检查 Amazon Objects 以查看是否定义
- 查看是否定义了复杂对象变量(objectVar.some.other.value)的简单方法
- 根据页面中是否定义了元素,提供备用外部 Javascript 文件
- 检查是否定义了 CKEDITOR
- Android WebView - 检测是否定义了 JS 函数
- 检查是否定义了对象/函数(JavaScript、Safari问题)
- GWT和JSNI.检查是否定义了函数
- 使用Array.every()函数检查是否定义了所有值
- 查看函数是否定义的更清晰的方法
- 检查对象名称为string的地方是否定义了object
- 确定成员是否定义在(Javascript)超类中
- 检查是否定义了对象的一部分
- 是否有一种方法可以发现javascript 6类是否定义了自己的构造函数?
- 如何检查是否定义了jQuery宽松方法
- 检查是否定义了JSON对象