Saiba a diferença entre declarar uma matriz com “array()” e “[]” em JavaScript

O JavaScript permite a sintaxe direta "var x = ” e presto!, com uma variável que pode ter mais de um valor. Veja a diferença de matriz com “array()” (...)

Autor: Redação Impacta

Na prática, uma tem cinco toques a mais do que a outra. Agora, falando sério, o JavaScript nos permite a sintaxe direta “var x = [];” e presto!, temos uma variável que pode conter mais de um valor. Sempre que uma linguagem oferecer uma sintaxe direta, use-a.

Entretanto, há duas outras opções definidas na referência da documentação:

[element0, element1, …, elementN]  // a sintaxe direta que vimos no início

new Array(element0, element1[, …[, elementN]]) // usando o construtor Array(),

                                                // passando os elementos como argumento

new Array(arrayLength)  // usando o construtor Array(),

                       // passando o comprimento (lenght) como argumento

Alguns exemplos de declaração

– Criando um array vazio:

var meuArray = new Array();

var meuArray = [];

são construções com resultado idêntico.

– Criando arrays com elementos predefinidos:

var meusCarros = new Array(“Gol”, “Uno”, “Celta”);

var meusCarros = [“Gol”, “Uno”, “Celta”];

também são construções com resultado idêntico.

Evitando confusão

var arrConstrutor = new Array(8);

var arrDireto = [8];

As declarações acima NÃO SÃO construções com resultado idêntico. Lembra-se da última opção na sintaxe do construtor “new Array(n)”? Esta opção cria um array com “n” elementos ‘undefined’; o argumento tem que ser um integer, qualquer outro número vai retornar erro. No caso citado agora, “arrConstrutor” tem um comprimento igual a 8, e todos os elementos ‘undefined’. A variável “arrDireto” têm um comprimento igual a 1, e contém o literal “8” na sua primeira posição. Resumindo:

  • x = arrConstrutor.length; // x será igual a 8
  • z = arrDireto.length; // z será igual a 1
  • y = arrConstrutor[0]; // y será igual a ‘undefined’
  • w = arrDireto[0]; // w será igual a ‘8’

Para clarear mais ainda, vamos criar dois arrays diferentes usando o construtor:

  • var a = new Array(8);
  • var b = new Array(8, 9);

Agora, “a” têm um comprimento igual a 8, e todos os elementos ‘undefined’. A variável “b” tem um comprimento igual a 2, e contém os literais “8” e “9” na sua primeira e segunda posições, respectivamente. Então:

  • x = a.length; // x será igual a 8
  • z = b.length; // z será igual a 2
  • y = a[0]; // y será igual a ‘undefined’
  • w = b[0]; // w será igual a ‘8’
  • t = b[1]; // t será igual a ‘9’

Quando devo usar um ou outro?

Já que o Array no JavaScript não requer uma alocação de memória prévia, e eles podem ser estendidos a qualquer momento, economize tempo usando sempre a sintaxe direta “var a = [];”. Alguns desenvolvedores afirmam que o webkit e outros engines possuem uma otimização quando o comprimento do Array é predefinido, mas não encontramos nenhuma evidência nas specs que suportem tais afirmações.

Resta uma pequena exceção que pede o uso do construtor; quando for construir algo como:

var arrayVazio = new Array(100);

Como foi exemplificado, isto cria um array vazio de 100 posições, todas elas contendo ‘undefined’ — que pode ser útil onde se aplicarem arrays predefinidos com ciclo de vida curto (ao preparar um formulário web para serialização, transformando os dados antes de enviar) ou situações como “(new Array(9)).join(‘Na-Na ‘) + ‘Batman!’;”.

DeathtoStock_Desk7-min (1)Para encerrar, vamos fazer a seguinte sugestão: evite o construtor “new Array()”, você não precisa usá-lo; use “[]”. O uso do construtor complica seu código e pode produzir efeitos colaterais indesejados.

Ainda tem dúvidas? Deixe um comentário!

0 Comentários

  1. joão paulo disse:

    Como faço para declarar um array de forma [-1] por exemplo? Na plataforma profit da Nelogica existe a função de plotar a media movel de mercado financeiro em [-x], mas no editor não consegui, alguem sabe me ajudar?

Deixe o seu comentário!

Não perca nenhum post!