gpt4 book ai didi

javascript - 给定名称作为字符串,如何检查 JavaScript 对象?

转载 作者:行者123 更新时间:2023-11-30 07:17:43 24 4
gpt4 key购买 nike

我无法弄清楚如何获取对象名称的字符串并检查该对象是否确实存在。

我想要完成的是有一个数组,它定义了特定 JavaScript“模块”工作所需的对象,例如:

var requiredImports = ['MyApp.Object1', 'MyApp.Object2'];

然后使用 requiredImports,我想遍历它们并检查它们是否已定义。在不使用上述数组的情况下,我可以执行以下操作,这是我想要完成的:

if (MyApp.Object1 == undefined) {
alert('Missing MyApp.Object1');
}

但是使用上面的方法,我必须为每个模块硬编码,而不是制作一个通用方法,我可以只向它传递一个字符串数组并让它有效地为我做同样的检查。

我尝试通过将对象本身传递给它来做到这一点,例如:

var requiredImports = [MyApp.Object1, MyApp.Object2];

但是当这些对象不存在时会抛出一个 JavaScript 错误,这正是我试图捕捉到的。

最佳答案

var MyApp = {
Object1: {}
};

function exists(varName, scope) {
var parent = scope || window;
try {
varName.split('.').forEach(function (name) {
if (parent[name] === undefined) {
throw 'undefined';
}

parent = parent[name];
});
}
catch (ex) {
return false;
}

return true;
}

console.log(
exists('MyApp.Object1'), // true
exists('MyApp.Object2'), // false
exists('window'), // true
exists('document'), // true
exists('window.document') // true
);


// or
console.log(
['MyApp.Object1', 'MyApp.Object2', 'window', 'document', 'window.document'].filter(function (varName) {
return !exists(varName);
})
);
// => ["MyApp.Object2"]

注意:forEach 是 ES5,因此在某些浏览器中未实现。但是如果你选择这个解决方案,那么有一个很好的 polyfill here .

关于javascript - 给定名称作为字符串,如何检查 JavaScript 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8313726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com