javaScript使用for...in循环数组问题

代码一:

  var param = [1990,1991,1992];

   for(var t in param){
         alert(param[t]);
   }

如果这样写确实可以循环出数组的每一个元素

 

代码二:

  var str = "this is year 1990,1991,1992";
  var rex = /\b\d{4}\b/g;
  var param2 = str.match(rex);//正则匹配后 这个返回的也是数组啊 而且调用length属性的时候长度也是3。(param2.length=3)
  for(var t in param2){
       alert(param2[t]);
  }

为什么在代码二使用for...in循环的时候会弹出alert框6次啊? 一样是循环数组啊

而且第一次alert里面显示的值是“this is year 1990,1991,1992”

第二次是“1990” 第三次是“1991” 第四次是“1992”

然后第五次是“23” 第六次是“27”.

这是怎么回事啊

1、for-in 如果是数组循环的是索引 如果是对象循环的是属性名

2、在chrome/firefox等浏览器将输出正确的结果
for(var t in param2){
alert(t); //t将是 0 1 2
}

3、在IE浏览器 还有input(原始串) index(当前匹配的位置) lastIndex(匹配的最后位置)属性
for(var t in param2){
alert(t); //t将是 input 0 1 2 index lastIndex
}

4、正确的方式是
for(var i=0;i<param2.length;i++){
alert(param2[i]);
}

正则不对吧?
应该是//吧?
后面你多加了个g是什么意思呢?

for in 在js里是用来遍历对象中的属性的,不要用它来遍历数组!遍历数组就用传统的for循环

因该是IE7 & IE8的bug,因为你正则带g了,带g和不带g表现是不同的,IE9下正常。