Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, estou tentando acessar o índice de um array cujo valor não é um inteiro e sim string, porém não estou entendendo o acesso (consegui obter o valor mas gostaria de entender o conceito por de trás). Segue o exemplo:
Tenho o código abaixo:
//Exemplo 1 - Preciso de esclarecimento do conceito desse tipo de array
listHeight = new Array({'actualHeight' : actualHeight, 'realHeight' : realHeight});
//Exemplo 2 - normal... sem problema
listHeight2 = new Array();
listHeight2['actualHeight'] = actualHeight;
listHeight2['realHeight'] = realHeight;
Bom o exemplo 1 é o qual gostaria de alguém me ajudasse a entender o conceito.
Meu entendimento: O exemplo 1 e o exemplo 2 são idênticos .. porém o acesso ao array eu nao consegui fazer da mesma forma para os dois exemplos.
Para o exemplo 1, eu não conseguir acessar a array assim:
alert(listHeight['actualHeight']);
somente assim deu certo:
alert(listHeight[0]['actualHeight']);
Para o exemplo 2, foi normal, acessei assim:
alert(listHeight2['actualHeight']);
A pergunta: Por que houve essa diferença para acessar o array, a declaração não foi a mesma para os dois tipos?
Muito obrigado pela resposta JCMais.
Realmente eu estava achando que era um array associativo e nem fazia idéia que não existia no javascript (embora eu observei que nenhum sabe falava a respeito).
Vou dar uma lida no link informado.
Obrigado.
Só para esclarecer para mim...
O exemplo 2:
//Exemplo 2 - normal... sem problema
listHeight2 = new Array();
listHeight2['actualHeight'] = actualHeight;
listHeight2['realHeight'] = realHeight;
Seria correto faze-lo assim:
listHeight2 = {};
listHeight2['actualHeight'] = actualHeight;
listHeight2['realHeight'] = realHeight;
Neste caso, listHeight2 é um objeto... e nas linhas abaixo declara os valores para as propriedades desse objeto?
Neste caso, listHeight2 é um objeto... e nas linhas abaixo declara os valores para as propriedades desse objeto?
Exato. :thumbsup:
Em Javascript, as propriedades de um objeto podem ser acessadas tanto usando [inline]obj.prop[/inline] quanto [inline]obj['prop'][/inline].
>
A pergunta: Por que houve essa diferença para acessar o array, a declaração não foi a mesma para os dois tipos?
Não, Javascript não possui arrays associativas, que é o que você acha que criou na primeira declaração.
Na realidade você simplesmente criou uma array na qual o primeiro elemento é um objeto contendo as propriedades actualHeight e realHeight.
Se deseja algo semelhante à uma array associativa você precisa usar um Objeto.
E detalhe:
//Exemplo 2 - normal... sem problema
Nãaaaaaaaaao faça isso. Você está definindo uma propriedade da instância da Array (pois em Javascript uma Array também é um Objeto) e não atribuindo um item à mesma. :thumbsup:
Leitura relacionada (em inglês) :seta: http://andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/