Насколько мне известно, массив - это список значений доступ к которым осуществляется по числовому индексу. Недавно натолкнулся на такой код:
var arr = [];
arr['test'] = 'string';
console.log(arr['test']);
Не могу понять что в этом случае происходит?
var arr = [];
arr['test'] = 'string';
console.log(arr.test);
console.log(Object.prototype.toString.call(arr.test));
console.log(Object.prototype.toString.call(arr));
console.log(arr.length);
Если создается именованное свойство у массива, то почему тогда его длина равна 0. Судя по тому что к свойству можно обращаться через точку arr теперь объект, но Object.prototype.toString.call говорит об обратном. Или же это поведение характерно массивам так же как функциям (им можно создавать свойства ) из за дальнего родственника в прототипе - Object.
Массивы являются объектами, поэтому любому массиву можно добавить свойство с не числовым именем.
Поэтому запись:
var arr = [];
arr['test'] = 'string';
Вполне допустима.
Но так как массив - это особенный объект, его методы и свойства рассчитаны на работу только со свойствами с числовыми именами.
Например, length - это свойство, значение которого должно быть больше любого числового индекса. Отсюда видно, что оно никак не связано с количеством элементов в массиве, не говоря уже про свойства с не числовыми именами.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники