Да. Во втором примере вы «злоупотребляете» тем фактом, что Array
также является Object
. Не делай этого.
Используйте Array
s только для числовых индексированных значений и обычное Objects
для своего рода хеш-таблиц.
Предлагаю прочитать подробнее о Array
с и Object
с .
В JavaScript в основном все является объектом. Также массивы. Но объект Array
предоставляет дополнительные методы для работы с числовыми индексированными данными.
Вероятно, вы сможете лучше увидеть разницу, если наберете samples.length
во втором примере. Простой объект не имеет свойства length
, как у массива. Для массива он сообщает вам количество элементов, хранящихся в массиве. Теперь, когда вы вызовете samples.length
во втором примере, вы получите 0
, потому что массив фактически не содержит элементов.
Что может привести к еще большей путанице, так это то, что у вас есть две возможности доступа к свойствам объекта: «Точечная нотация», object.property
и «Массивная нотация», object['property']
. Но это функциональность объектов, а не массивов.
Нотация массива оказывается полезной, когда вы генерируете ключи или сохраняете имя свойства в переменной.
Обновление:
Как написано, вы можете использовать нотацию массива для динамического создания свойств, например ::
var samples = {};
for(var i = 0; i < 4; i++) {
samples["TB10152254-" + i] = {
folderno: "TB10152254",
ordno: i,
startfootage: "",
endfootage: "",
tagout: "Y"
}
}
Если вы хотите получить доступ к свойствам, вы должны использовать цикл for...in
для перебора ключей:
for(var key in samples) {
var value = samples[key];
}
Но обратите внимание: никогда не используйте for...in
для циклического перемещения по массиву. На странице, на которую я ссылаюсь, также написано почему.