<p>话说今天调了一个bug,先叙述一下过程吧:</p>
<p></p>

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

<p> 这段代码估计很多人用过吧,他是用来解决IE下没有indexOf这个问题的,也就是因为这段代码,才出现的IE下for in的问题(好吧,都是万恶的IE。。。。。)</p>
<p>当还没加上这段代码的时候</p>

var a = [1,2,3];
for( var k in a){
    alert(a[k]);
}

这样没有任何问题,结果是1,2,3。。。。<p></p>
<p>但是,当加上上面的代码时,奇迹就发生了,他会先打出上面的function,然后再1,2,3。。。。。。</p>
<p>额。。。  神一样的蛋疼。。。</p>
<p>大概的意思就是IE下用for in的时候,不光会遍历出数组的值,还会遍历出你新添加的方法。。。。  </p>
<p>所以,大家以后在IE下用for in请小心喽~</p>
<p>解决办法嘛,目前我想到的就是加一个判断:</p>

for( var k in a){
    if( k == "indexOf")
        continue;
    .........
}

<p>或者是:</p>

for( var k in a){
    if(!isNaN(k)){
        .........
    }
}

大概就是这个样子,如果高手有好的方法的话,希望留言告诉我一下,先在这儿谢谢啦~<p></p>
<p>嗯嗯,差不多就这个样子,然后就是,话说这个周五要世界末日了,亲们还有什么想做的赶紧去行动吧~</p>

标签: js

暂无评论

  1. 好孩子,这样学习很不错~

添加新评论