这是一个临界问题,但我认为值得一提。以下是检查underscore.js是否已加载的最简洁方法,并且是否有任何回溯方法。
typeof _ == "function" ? console.log('yes') : console.log('no');
老实说,我的“真实”问题如下。基本上这是一个将在很多前端框架上使用的插件。有些人会有underscore
而有些则不会。为了使其具有通用性并使用underscore
提供的方法,我想检查underscore
并在我选择使用它时提供后备(如果不存在)。
这是不好的做法吗?我不应该在它存在时使用下划线吗?
注意:不幸的是lodash.js
不是一个选项,因为我愚蠢地将underscore.js
调整到require
配置中,而人们似乎并不理解其必要性AMD兼容模块
答案 0 :(得分:9)
鉴于Underscore是作为函数导出的,所以说执行类型检查是检查内存中Underscore是否可用的最简洁方法是正确的。 如果我做对了 - 出于一些奇怪的原因,我得说 - 你要实现一个功能检查,这样没有特定方法实现的上下文会优雅地降级。
您只需检查下划线和所需的功能即可。由于每个特征都是Underscore的属性,因此您可以通过类型检查来检查它是否已定义:
if(typeof _ === 'function') {
if(typeof _.reduce !== 'undefined') {
// fallback goes here
}
}
请记住,根据您尝试回退的功能,您可能会失去Underscore的链接功能。我会仔细检查一下。
答案 1 :(得分:2)
我还想测试Lodash是否已加载,这段代码适用于 Lodash 和下划线:
var obj = {
eins: false,
zwei: false,
drei: false,
};
var id = setInterval(function() {
for(var key in obj) {
if(obj[key] === false) return;
}
// No property was false
clearInterval(id);
// do anything you want here
}, 1000);