Именованное свойсто массива JavaScript

207
23 мая 2017, 03:24

Насколько мне известно, массив - это список значений доступ к которым осуществляется по числовому индексу. Недавно натолкнулся на такой код:

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.

Answer 1

Массивы являются объектами, поэтому любому массиву можно добавить свойство с не числовым именем.

Поэтому запись:

var arr = [];
arr['test'] = 'string';

Вполне допустима.

Но так как массив - это особенный объект, его методы и свойства рассчитаны на работу только со свойствами с числовыми именами.

Например, length - это свойство, значение которого должно быть больше любого числового индекса. Отсюда видно, что оно никак не связано с количеством элементов в массиве, не говоря уже про свойства с не числовыми именами.

READ ALSO
Массив в JavaScript

Массив в JavaScript

Необходимо сделать, чтобы помимо основной функции, которая сейчас работает, в каждой строке массива количество его элементов увеличивалось...

259
Проблема с циклом JS

Проблема с циклом JS

Всем приветНужна ваша помощь

249
Как закрыть все divы

Как закрыть все divы

Я новичекНикак не могу разобраться, как закрыть один div если нажимаем на другую кнопку

235