Я просто хочу понять, как работают массивы JavaScript, но у меня есть сложная проблема.Длина массива и неопределенные индексы
Сначала я создал свой массив:
var arr = [];
И установить некоторые элементы в нем:
arr[5] = "a thing";
arr[2] = undefined;
Я думал, что я должен иметь массив размером 2, потому что у меня есть только два объекта на 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>");
* длина * свойство всегда ** не менее ** один больше, чем самый большой индекс. Это самонастраивается. – RobG
Важное примечание: * не используйте 'document.write' *, он не делает то, что, по вашему мнению, делает. То, что он делает ** не **, например, это «распечатать некоторые данные». Это чрезвычайно низкоуровневая функция, и у современных JS есть тонны лучших способов сделать то, что в 1998 году нам понадобилось document.write для. –
@ Mike'Pomax'Kamermans, да, я не буду в следующий раз. Все, спасибо за все ответы. –