Javascript: Arrays e Objetos

Sempre tive o costume de utilizar códigos semelhantes a este:

var colecao = new Array();

colecao["teste"] = new UmaClasseQualquer();

Apesar de pouco aparente, esta forma de programar não é a mais indicada. Arrays, em Javascript, devem ser usados preferencialmente com índices numéricos. Mas e se você quiser um array associativo igual ao do código apresentado? Use OBJETOS! Arrays associativos são objetos com atributos definidos dinamicamente.
Confuso? É, eu também acho. Mas há diversos inconvenientes em usar Arrays como associativos. Por exemplo:

var colecao = new Array();
colecao["length"] = 200;
colecao[0] = "teste";
colecao[1] = "teste2";
alert(colecao.length);

O que será apresentado no código acima? O número 3? Errado, será o número 200, pois você acabou de redefinir o método length existente nos objetos Array em Javascript.

O melhor seria, então:

var colecao = new Object();
colecao["length"] = 200;
foreach ( key in colecao ) {
   alert(key + "=" + colecao[key]);
}

Ah sim, e mais um detalhe. Caso você tenha criado um “array associativo”, não pense que length irá retornar o tamanho do array, pois, como eu já disse, não existem array associativos na verdadeira concepção da palavra, e sim objetos. Portanto:

var arr = {id:1, descricao:"teste"};
alert(arr.length);

Este código não vai lançar um alerta com o número 2. Primeiro, porque a variável arr não é um array para ter o método length. Segundo, porque arr é um objeto com dois atributos: id e descricao. Portanto, cuidado com códigos como este:

var arr = new Array();
arr[0] = "teste";
arr["teste"] = 2;
alert(arr.length);

O que será retornado? Caso tenha prestado atenção a tudo que eu disse, você dirá 1. 🙂

×