Показать сообщение отдельно
  #12 (permalink)  
Старый 14.04.2012, 13:38
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от bes
Говорит ли это о том, что псевдомассивы (такие как HTMLCollection) отличаются от массивов только тем, что у них нет некоторых методов массивов?
Нет.
Вы процитировали мое сообщение не полностью, опустив более важное отличие, а именно живость массива.
Вот пример приведенного кода, только a - это уже массив, с одним элементом - ссылкой. Запускать на вашем HTML-е
var a_elem = document.getElementsByTagName('a')[0];
var a = [a_elem];
console.log(a.length);//1
console.log(a[0]);//<a href="">
console.log(a[0].innerHTML);//content
document.getElementsByTagName('div')[0].innerHTML = 'qwe';
console.log(a.length);//1
console.log(a[0]);//<a href="">
console.log(a[0].innerHTML);//content

Как видим для настоящего массива количество элементов не изменилось, и он даже все еще хранит некоторую информацию об элементе которого уже нету в DOM-модели.
А HTMLCollection в данном случае вместе с ичсчезновением ссылки, и сам переставал ссылатся на нее, и становился размера 0
================================================== ======
Вообще массивом является только то, что выдает true на x instanceof Array
var construct = function(){//конструктор объектов - наследующих массив
    for(var i =0; i < arguments.length; i++){
        this.push(arguments[i]);
    }
};
construct.prototype = [];


var a = document.getElementsByTagName('a');
var b = {};
b[0] = 'qwe';
var c = ['qwe']
d = new construct('qwe');

console.log(a.length, a[0], a instanceof Array);//false
console.log(b.length, b[0], b instanceof Array);//false
console.log(c.length, c[0], c instanceof Array);//true
console.log(d.length, d[0], d instanceof Array);//true

Результат:
Код:
1 <a href=""> false
undefined qwe false
1 qwe true
1 qwe true
Как видим, только c и d являются массивами(второй - наследует его свойства), хотя у всех объектов в данном случае можно получить нулевой элемент
Ответить с цитированием