Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Почему массив ведет себя как объект?

#javascript


Почему массив stage.days возвращает длину 0, но итерация по нему идёт как по объекту?
Его тип Array с длиной 0.

var stage = {
    days: []
};

stage.days['11-2']= [];
stage.days['11-3']= [];

alert(stage.days.length);  // 0

for(var it in stage.days){
    debugger // stage.days['11-2']
}

    


Ответы

Ответ 1



Ответ на ваш вопрос дают следующие две статьи: Массивы с числовыми индексами Массив – разновидность объекта, которая предназначена для хранения пронумерованных значений и предлагает дополнительные методы для удобного манипулирования такой коллекцией. Работа с объектами в JavaScript: теория и практика В JavaScript есть 6 базовых — это Undefined (обозначающий отсутствие значения), Null, (булев тип), (строка), Number (число) и Object (объект). При этом первые 5 являются примитивными типами данных, а Object — нет. Кроме того, условно можно считать, что у типа Object есть «подтипы»: массив (Array), функция (Function), регулярное выражение (RegExp) и другие. Это несколько упрощенное описание, но на практике обычно достаточное. И простой эксперимент: console.log(typeof []); // "object" Дополнительно прочитайте статью "Наследование классов в JavaScript". Там как раз рассмотрен случай наследования Array от Object. Не менее полезно будет прочитать статью "Объекты как ассоциативные массивы" (спасибо @AlexKrass за наводку).

Комментариев нет:

Отправить комментарий