Я просто хочу понять, как работают массивы 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>");