为什么我应该在我自己的自定义'array.indexOf'中使用'i in array'?

mit*_*221 2 javascript arrays indexof

我见过很多次这样的事情:

function customArrayIndexOf(item, array){
    for (var i = 0, l = array.length; i < l; i++) {
        if (i in array && array[i] === item) return i;
    }
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

但是,我不确定为什么i in array需要.

我有三个问题:

  • 它在做什么?
  • 有必要吗?
  • 没有它会失败吗?

dav*_*vin 6

稀疏数组可能会在没有检查的情况下导致误报:

var customArrayIndexOf = function(item, array){
    for (var i = 0, l = array.length; i < l; i++) {
        if (i in array && array[i] === item) return i;
    }
    return -1;
},
customArrayIndexOfNoCheck = function(item, array){
    for (var i = 0, l = array.length; i < l; i++) {
        if (array[i] === item) return i;
    }
    return -1;
};

var t=[]; t[1]=1;

customArrayIndexOfNoCheck(undefined, t); // 0
customArrayIndexOf(undefined, t); // -1
Run Code Online (Sandbox Code Playgroud)

(i并且l应该是本地的,即声明的var)