Javascript 脚本中未捕获的引用错误
这可能很简单,但我对JavaScript不是很在行,所以这里有点困难。我有以下代码:Javascript 脚本中未捕获的引用错误,javascript,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 fi
//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");
}
});
我得到以下错误:
未捕获引用错误:未定义ieVersion
我很难理解为什么它没有定义。有人能解释一下吗?在脚本顶部有一个很大的if/else if/else块,它可能会设置ieVersion 这三个部分中的每一部分都有一个变量赋值,但其中一些部分在另一个if中有赋值 例如,这意味着您可以在navigator.appName=='Netscape'时匹配,然后在re.execua!=null,因此永远不会到达ieVersion=语句 解决此问题的最简单方法是设置默认值:
ieVersion = null;
在脚本的最顶端
您还应该显式声明它var ieVersion=null,因为这被认为是很长一段时间以来的最佳实践,JavaScript严格模式需要它。要么声明var ieVersion=null;在初始方法之前,或使用window.ieVersion,即在if block之前定义ieVersion,如var ieVersion=null;还要将条件更改为ifie==true&&ieVersion&&ieVersion>7尝试在带有var ieVersion的标记之后将ieVersion声明为顶部的全局变量如果用户代理与regexp不匹配,则不设置ieVersion。您应该设置一个默认值或添加一个else子句。我曾假设在else语句中设置它会声明它,因为如果前两种情况不适用,则始终如此,但显然不适用!