Ответ 1
Это фактически найдет значение undefined
в массиве, проблема в том, что ваш массив a
не имеет в нем значений undefined
, поэтому он возвращает -1, что означает, что он не нашел. Ваш массив выглядит так:
[*uninitialized*, 1]
Тот факт, что вы ничего не помещаете в первую позицию, не означает, что он заполнен с помощью undefined
, он просто не инициализирован/не существует.
Если вы сделали что-то вроде:
var a = [undefined, 1];
var index = a.indexOf(undefined);
console.log(index);
Он действительно напечатает 0
, как ожидалось.
Изменить: чтобы ответить на вопрос о том, как найти неинициализированное значение, сделайте следующее
var a = [];
a[1] = 1;
for(var i = 0; i < a.length; i++){
if(a[i] === undefined){
console.log(i);
}
}
Это напечатает индекс значений неинициализированных массивов. Причина, по которой это действительно работает в отличие от indexOf
, заключается в том, что a[i]
будет оценивать до undefined
, если:
(1) Элемент существует и имеет значение undefined
или
(2) Элемент вообще не существует. indexOf
однако пропустит эти "пробелы" в массиве.