“indexOf”作为IE8中“for ... in”圈子中数组的键

时间:2012-04-04 11:36:04

标签: javascript internet-explorer internet-explorer-8 prototype ecmascript-5

我使用了here描述的代码,但现在,当我执行“for ... in ...”时,它将函数“indexOf”作为数组的索引位置... < / p>

示例代码:

var the_array=new Array();                  
for (key in the_array){
    console.log(key +"  -  "+the_array[key]);
} 

此代码在控制台中显示:

indexOf  -  function (searchElement /*, fromIndex */ ) {  
    "use strict";  
    if (this == null) {  
       throw new TypeError();  
    }  
    var t = Object(this);  
    var len = t.length >>> 0;  
    if (len === 0) {  
        return -1;  
    }  
    var n = 0;  
    if (arguments.length > 0) {  
        n = Number(arguments[1]);  
        if (n != n) { // shortcut for verifying if it's NaN  
            n = 0;  
        } else if (n != 0 && n != Infinity && n != -Infinity) {  
            n = (n > 0 || -1) * Math.floor(Math.abs(n));  
        }  
    }  
    if (n >= len) {  
        return -1;  
    }  
    var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);  
    for (; k < len; k++) {  
        if (k in t && t[k] === searchElement) {  
            return k;  
        }  
    }  
    return -1;  
}

如何防止该函数作为数组上的键出现?

是的,我知道我可以使用jquery的inArray函数,但在这种情况下,我想使用“indexOf”函数......

1 个答案:

答案 0 :(得分:2)

出于这个原因和其他原因,在数组上使用for...in是一个坏主意。请在此处查看我的回答:

Why is 'for(var item in list)' with arrays considered bad practice in JavaScript?