2015-04-17 3 views
4

Я много раз встречался с термином «Array-Like Object» в javascript. Что это ? В чем разница между ним и нормальным массивом? В чем разница между объектами, подобными массиву, и нормальным объектом?javascript - Разница между массивом и объектами, подобными массиву

+1

обратитесь пожалуйста? –

+0

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

+2

Объект, подобный массиву, представляет собой объект, который вы можете выполнять итерацией с использованием регулярных индексов цикла 'for' и чисел. Объекты, подобные массиву, возвращаются из многих встроенных методов DOM, таких как 'getElementsByClassName()'. – Teemu

ответ

12

Что это?

Объект, который имеет длину свойство неотрицательного Integer, и, как правило некоторые индексированные свойства. Например

var ao1 = {length: 0},      // like [] 
    ao2 = {0: 'foo', 5: 'bar', length: 6}; // like ["foo", undefined × 4, "bar"] 

Вы можете конвертировать массив как объекты их массива коллег с использованием Array.prototype.slice

var arr = Array.prototype.slice.call(ao1); // [] 

Что разница между ним и обычным массивом?

Это не построен Array или с массива буквального[], и поэтому (как правило) не наследуют от Array.prototype. Значение length не будет автоматически автоматически обновляться.

ao1 instanceof Array; // false 
ao1[0] = 'foo'; 
ao1.length; // 0, did not update automatically 

Что разница между массивом типом объектом и обычным объектом?

Нет никакой разницы. Даже нормальный Массивы являются объекты в JavaScript

ao1 instanceof Object; // true 
[] instanceof Object; // true 
+0

'и так (обычно) не будет наследовать от Array.prototype' Поразмыслить над частью« обычно »? Разве это не массив, а массив, если он наследует от 'Array.prototype'? – Taurus

+0

@Taurus Если вы настроили прототип в пути ES5- для какого-либо пользовательского объекта, вы получите Array-like 'Array.isArray (Object.create (Array.prototype)); // false. Если вы используете ES6 + 'class A2 extends Array' и' super', вы получите Array 'Array.isArray (новый A2); // true' –

+0

@Paul_S.Я рассматриваю это как нечто большее с методом 'isArray', поскольку он использует внутреннее свойство' [[class]] 'за кулисами, чем доказательство того, что объект с' Array.prototype' является массивом, скорее, объект, который имеет доступные ему методы массива (через наследование от 'Array.prototype', это также означает, что он имеет свойство length) и численно индексируется не как массив, а массив. – Taurus

-2

Я думаю, в ES6, что-то массив типа, если он итерацию (имеет [Symbol.iterator] свойство).

+0

'Объект, подобный массиву', является фактическим названием существа, которое существует. Он определил свойства, которые могут быть применены конкретно к объектам, построенным и используемым определенным образом. – monsto

Смежные вопросы