Почему я должен использовать 'i in array' внутри своего собственного 'array.indexOf'? - PullRequest
2 голосов
/ 19 февраля 2012

Я много раз видел такие вещи:

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;
}

Однако я не уверен, зачем нужен i in array.

У меня три вопроса:

  • Что он делает?
  • Это необходимо?
  • Когда он потерпит неудачу без него?

1 Ответ

6 голосов
/ 19 февраля 2012

Разреженные массивы могут привести к ложному срабатыванию без проверки:

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

(i и l должны быть локальными, то есть объявлены с var)

...