在执行脚本之前查看对象是否未定义

时间:2013-12-06 18:04:14

标签: javascript jquery

我目前正在我的网站上加载custom.js文件,它会调用各种功能。但是,为了保持较小的尺寸,我只加载某些页面上所需的库。

因此,由于custom.js文件已加载到每个页面,并且它调用了特定页面可能的函数,因此我得到{{在某些网页上我的网站上出现错误。

我希望能够做的是确定在执行代码之前是否定义了某些内容以防止错误弹出。

举个例子,我在头版上使用Jarallax(http://www.jarallax.com/)只有以下内容:

undefined is not a function

由于Jarallax仅在主页上加载而没有其他人在所有页面上都遇到了未定义的函数错误,但是这些错误。在尝试执行代码之前,我怎么能先确认加载了Jarallax?

3 个答案:

答案 0 :(得分:1)

由于引用未定义的变量会引发ReferenceError异常,您可以使用try/catch块来处理异常。

try {
  var jarallax = new Jarallax();
} 
catch (e) {
  // desired behavior for this situation.
}

有关try/catch块的详情。

答案 1 :(得分:1)

  

但是,为了减小尺寸,我只加载所需的库   某些页面。因此我得到“未定义不是函数”   某些网页上我网站上的错误。

所以这意味着你没有在每一页都正确地做到这一点?

您可以使用包装器对象或类来解决此问题:

(function($){

    var wrapper = {
        init: function(){
            var jarallax;

            if (typeof Jarallax == 'function'){
                jarallax = new Jarallax();
                jarallax.addAnimation('div#bigSlider',[{progress:'0%',marginTop:'0px'},{progress:'100%', marginTop:'-200px'}]);
            }
        }
    };

    // once the DOM is read
    $(function(){
        wrapper.init();
    });
}(window.jQuery));

通过在DOM就绪上停止init函数,如果确保在HTML中的包装器之前添加Jarallax的脚本标记,则可以确定脚本已加载。在任何其他情况下,init函数都不会做任何事情。

答案 2 :(得分:0)

if (typeof jarallax === "undefined") {
   var jarallax = {
   obj: {},

     return {
     obj;
   };