IE 8はJSの配列に対して、属性遍歴の方法を採用して、異なるところを解析します.

887 ワード

ここはブラウザバージョンの違いによって穴が開けられています.
Array.prototype.Contains = function (str) {
    if (!str)
        return false;
    for (var i = 0; i < this.length; i++) {
        if (this[i] == str) {
            return true;
        }
    }
    return false;
}

var tmp = new Array();
tmp.push("1");
tmp.push("2");
tmp.push("3");
alert("    ");
for ( var i in tmp ) {
     alert(tmp[i]);
}
alert("    ");
for ( var i=0;i<tmp.length;i++ ) {
     alert(tmp[i]);
}
IE 8ブラウザであれば、 えば(IE 7、IE 9、Chrome、FFのみをテストする) と を して、その は じです.
しかし、IE 8については、 が し ってきます.IE 8ではプロトタイプチェーン を として しますので、テストしてみてください.
この いを したのも、 しげなバグを したからです.ある がコードの でfor(var i in tmp)という を って の を しています.もしArayに してプロトタイプチェーンの を したら、この が します.
を するなら、 な き for(var i=0;i<tmp.length;i+)を するべきです.