Почему я должен использовать «я в массиве» внутри моего собственного массива «Массива»?

StackOverflow https://stackoverflow.com/questions/9347141

  •  27-10-2019
  •  | 
  •  

Вопрос

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

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 нужный.

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

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

Решение

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

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)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top