我可以检查我的javascript ext-lib(例如fancybox插件)是否已经存在于我的页面中(不管它的版本)吗? 我使用liferay portlet,它可以在一个页面中放置两个相同的portlet,我现在已经有一些脚本冲突了。 (布局配置面板上的 Liferay AUI 脚本、某些 assetPublisher 中的 slider ...)
最佳答案
如果您正在测试 native javascript 函数(即内置函数或使用 javascript 创建的函数),则:
if (typeof foo == 'function')
无论您使用哪个库,都将始终有效。例如测试 jQuery 是否可用:
if (typeof jQuery == 'function')
我不会信任宿主对象的 jQuery isFunction 方法,如果您不测试宿主对象,typeof 是完全可靠的。
编辑
哦,我应该补充一点,如果你正在测试宿主对象的方法,有很多方面需要考虑。在绝大多数情况下,以下内容就足够了:
if (hostObject && hostObject.method) {
// call hostObject.method
}
值得注意的是,宿主对象不需要遵守 ECMA-262(尽管大多数现代实现在很大程度上都这样做,至少对于 DOM 对象而言)。有许多正在使用的实现具有主机对象,当使用 typeof
进行测试时,它们将返回“未知”或类似的结果,一些旧的甚至会抛出错误。
如果使用 object.prototype.toString.call(hostObject)
(jQuery 的 isFunction 函数使用)进行测试,某些宿主对象会抛出错误,所以除非您要实现一个强大的 isHostMethod 函数,上面的方法在绝大多数情况下都可以。
关于include - 检查javascript lib是否已经存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12207662/