是lodash或下划线
什么是“权威”的方式来检测_
变量是否加载了lodash或下划线?
我在有时可能加载下划线的环境中使用lodash作为项目。
目前,我已经想出了这个:
/**
* lodash defines a variable PLACEHOLDER = '__lodash_placeholder__'
* so check if that is defined / contains the string "lodash"
*/
if ( typeof( _.PLACEHOLDER ) == 'undefined' || _.PLACEHOLDER.indexOf( 'lodash' ) < 0 ) {
// _ is underscore, do what I need to access lodash
}
重要更新:上述代码不起作用!
是否有一种“权威”的方法来检测_
是否存在或下划线?
笔记:
这是一个特定的请求,用于查找确定lodash或下划线是否加载到_
变量中的方法:
1.下划线是否被加载是我无法控制的。 (lodash 是我的控制范围之内,而且将永远被载入)。
2.不能依赖lodash /下划线的加载顺序。
3.加载的下划线的版本可能会发生变化(它是可以更新的CMS框架的一部分)。
4. Lodash 4.17.x有300多个功能。 我的代码利用lodash中的许多函数。
5. Lodash包含许多强调不提供的功能。
6.两个库中存在的一些函数具有不同的实现。
与@bhantol类似,我们已经注意到,有一个迁移文档,其中包含lodash和下划线之间不兼容的区别列表。 这些不能被使用? 例如,
if ( typeof( _.invoke ) !== 'undefined' ){
// it's lodash
}
但是,是的,如果可能的话,扩大@ felix-kling和@tadman等人的评论,将问题限制在特征(例如:特定方法)层面而不是整个图书馆可能更可靠。
问题中发布的代码不起作用,因为PLACEHOLDER
是在缩小期间被重命名的私有变量。
因此,我修改了评论中提到的“特征检测”的概念。 请注意,如果未来版本的下划线在所有这些函数中滚动,或者lodash不赞成使用以下任何函数,则此方法可能会崩溃:
var isLodash = false;
// If _ is defined and the function _.forEach exists then we know underscore OR lodash are in place
if ( 'undefined' != typeof(_) && 'function' == typeof(_.forEach) ) {
// A small sample of some of the functions that exist in lodash but not underscore
var funcs = [ 'get', 'set', 'at', 'cloneDeep' ];
// Simplest if assume exists to start
isLodash = true;
funcs.forEach( function ( func ) {
// If just one of the functions do not exist, then not lodash
isLodash = ('function' != typeof(_[ func ])) ? false : isLodash;
} );
}
if ( isLodash ) {
// We know that lodash is loaded in the _ variable
console.log( 'Is lodash: ' + isLodash );
} else {
// We know that lodash is NOT loaded
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.3/lodash.js"></script>
链接地址: http://www.djcxy.com/p/94465.html
下一篇: Maximum possible size image and div expanding to fill the space