脚本中未捕获的ReferenceError

时间:2015-05-26 10:48:43

标签: javascript

这可能很简单,但我对JavaScript并不擅长,所以在这里挣扎了一下。我有以下代码:

//Internet Explorer
if (navigator.appName == "Microsoft Internet Explorer") {
    //Set IE as true
    ie = true;
    //Create a user agent var
    var ua = navigator.userAgent;
    //Write a new regEx to find the version number
    var re = new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})");
    //If the regEx through the userAgent is not null
    if (re.exec(ua) != null) {
        //Set the IE version
        ieVersion = parseInt(RegExp.$1);
    }
}
else if (navigator.appName == 'Netscape') {
    ie = true;
    var ua = navigator.userAgent;
    var re  = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null) {
        ieVersion = parseInt( RegExp.$1 );
    }
}
else {
    ie = false;
    ieVersion = null;
}

jQuery(document).ready(function() {
    if(ie == true && ieVersion > 7){
        jQuery("<br />").insertAfter(".entry-title wbr");
    }
});

我收到以下错误:

  

未捕获的ReferenceError:未定义ieVersion

我很难理解为什么没有定义它。有人可以解释一下吗?

2 个答案:

答案 0 :(得分:0)

在您的脚本顶部,您有一个很大的if / else if / else块,可能设置ieVersion

这三个部分中的每一部分都包含该变量的赋值,但其中一些部分将其放在另一个if内。

这意味着您可以,例如,匹配if (navigator.appName == 'Netscape'),然后无法匹配if (re.exec(ua) != null),因此永远不会达到ieVersion =声明。

解决此问题的最简单方法是设置默认值:

ieVersion = null;

位于脚本的最顶层。

也应该明确地声明它(var ieVersion = null),因为这已被认为是很长时间的最佳实践,并且JavaScript严格模式需要它。

答案 1 :(得分:0)

在初始方法之前声明var ieVersion = null;,或使用window.ieVersion,即http://jsfiddle.net/gys38u4q/