Я просто хочу понять, как работают массивы JavaScript, но у меня есть сложная проблема.
Сначала я создал свой массив:
var arr = [];
И установите в нем несколько элементов:
arr[5] = "a thing";
arr[2] = undefined;
Я думал, что у меня должен быть массив размером 2, потому что у меня есть только два объекта с двумя конкретными индексами. Поэтому я тестировал его с помощью свойства .length массивов:
document.write(arr.length + "<br>");
Результат, интересно, равен 6. Но он должен содержать два элемента. Как его размер может быть 6? Вероятно, это связано с последним индексом, который я использовал здесь arr[5] = "a thing";
Затем я попытался перевернуть его:
var size = 0;
for(var x in arr){
size++;
}
И переменная size теперь равна 2. Итак, что я узнал из этого: если я использую цикл for in, я буду вычислять, сколько в нем свойств, а не его последний индекс.
Но если я попытаюсь document.write(arr[4]) (который еще не установлен), он пишет undefined.
Итак, почему arr[2] подсчитывается в цикле for..in, но не arr[4]?
Позвольте мне ответить на мой вопрос: что я думал о typeof undefined == undefined, что удивительно верно. Но это JavaScript, нам нужно играть с ним, используя его собственные правила:)
jsFiddle и фрагмент ниже.
var arr = [];
arr[5] = "a thing";
arr[2] = undefined;
document.write(arr.length + "<br>");
var size = 0;
for(var x in arr){
size++;
}
document.write(size + "<br>");
document.write(arr[4] + "<br>");