2011-11-17 90 views
0

我目前正在创建一个网站,并且拥有一些适用于除IE7和IE8以外的所有浏览器的JavaScript。我已经通过插入几个'alert'语句对代码进行了一些测试,并推断出javascript在一个特定的'if'语句中断了。这不是'if'语句中的代码,因为我也测试过了。Javascript无法在IE7和IE8中工作

我自己看不出实际的'if'声明有什么问题,但请让我知道如果IE7/IE8和我生成的代码有问题。代码可以在下面看到。

预先感谢任何帮助。

var Items = new Array("a","b","c","d"); 
var queryString = window.location.search.substring(1); 

if(Items.indexOf(queryString) != "-1"){ 
    //code goes here 
} 
+1

indexOf()返回int不是字符串。 if(Items.indexOf(queryString)!= -1){//将工作。 } –

+1

Javascript当然可以在这两种浏览器中工作。尽管indexOf在所有浏览器中都不是数组的一种方法。如果需要,可以扩展数组原型以添加此功能。 – James

回答

4

在IE的数组原型上没有“indexOf()”函数。如果有,它会返回一个数字值而不是一个字符串。

您可以在该函数的MDN documentation page找到一个“indexOf()”填充。

此外,当您声明和初始化数组,使用数组常量的符号:

var Items = ["a", "b", "c", "d"]; 
+0

非常感谢,我实际上是通过编写自己的'for'循环来解决这个问题,还有几行代码,但现在可以在所有浏览器中完美地工作 – Phil

0

这里是扩展Array对象支持的indexOf在那些不支持它的浏览器的一种方式。这样做有其自身的问题,如果你通过(x in a)(不建议)迭代数组并且不检查hasOwnProperty,这会导致你的问题。

if(!Array.indexOf){ 
    Array.prototype.indexOf = function(obj){ 
     for(var i=0; i<this.length; i++){ 
      if(this[i]==obj){ 
       return i; 
      } 
     } 
    } 
}