Quando preciso declarar uma nova matriz, uso esta notação
var arr = new Array();
Porém, ao testar on-line, por exemplo, no jsbin , um aviso indica que "Use a notação literal da matriz []".
Não encontrei um motivo para evitar o uso do construtor. De alguma forma, é menos eficiente do que usar []
? Ou é uma má prática?
Existe uma boa razão para usar em var arr = [];
vez de var arr = new Array();
?
javascript
Naigel
fonte
fonte
Respostas:
Principalmente , as pessoas usam
var a = []
porque Douglas Crockford diz isso .Suas razões incluem o comportamento não intuitivo e inconsistente de
new Array()
:Observe que não há como
new Array()
criar uma matriz com apenas um elemento numérico pré-especificado!Usar
[]
é realmente mais eficiente e mais seguro também ! É possível sobrescrever oArray
construtor e fazê-lo fazer coisas estranhas, mas você não pode sobrescrever o comportamento de[]
.Pessoalmente, eu sempre uso a
[]
sintaxe e da mesma forma sempre uso a{}
sintaxe no lugar denew Object()
.fonte
[]
chama um construtor interno, e não o valorArray.constructor
que tiver naquele momento.Array
construtor: jsperf.com/new-arrayUma diferença significativa é que
[]
vai sempre instanciar um novo Array, enquanto quenew Array
poderia ser sequestrado para criar um objeto diferente .No meu exemplo de código, eu mantive a
Array
função oculta do restante do escopo do documento, no entanto, é mais provável que, se você se deparar com esse tipo de problema, o código não tenha sido deixado em um bom fechamento e provavelmente será difícil de localizar.Isenção de responsabilidade : não é uma boa idéia seqüestrar o
Array
construtor.fonte
para manutenção, use
[]
O literal da matriz é mais previsível, como a maioria dos desenvolvedores usa. A maior parte do uso de matrizes por aí estará usando o literal, e há um valor em ter seu código compatível com o que outros desenvolvedores usam.
para matrizes vazias, use
[]
Como mostrado aqui , o uso do literal para vazio e alguns elementos conhecidos é mais interessante que o construtor Array.
para uma matriz de tamanho conhecido, use
new Array(size)
Se o tamanho for conhecido, o uso do construtor Array melhora significativamente o desempenho. No entanto, isso também significa que você precisa lidar com uma matriz que já tenha 'indefinido' preenchendo todos os seus valores.
Como mostrado aqui
Isso também funciona para matrizes muito pequenas .
fonte
Não, na verdade não há razão para usar uma notação sobre a outra para matrizes vazias.
No entanto, a maioria dos navegadores mostra um desempenho um pouco melhor usando do
x = [];
que chamar o Construtor .Se você precisar criar uma matriz com um tamanho específico, precisará usar,
x = new Array(10);
por exemplo, o que criaria uma matriz com 10undefined
slots.fonte
A maneira mais rápida de definir uma matriz ou objeto é literal, porque você não precisa chamar o construtor
fonte
var arr = [];
usa logicamente um construtor. É sempre sempre o construtor de matriz embutido, em vez de qualquer função que esteja sendo usada atualmente pelo nomeArray
.Ambos estão corretos apenas. Mas a maioria das pessoas usa
var a = []
Três maneiras de declarar uma matriz em JavaScript.
método 1 : podemos declarar explicitamente um array com a palavra-chave "new" JavaScript para instanciar o array na memória (por exemplo, criá-lo e disponibilizá-lo).
método 2 : usamos um método alternativo para declarar matrizes.
método 3 : JavaScript também permite criar matrizes indiretamente, chamando métodos específicos.
fonte
Há um limite que o construtor pode usar como argumento.
Na maioria dos sistemas que encontrei, o limite é 2 ^ 16 (2 bytes):
Isso causará um erro (muitos argumentos ....)
Ao usar o literal [], você não tem esses problemas.
Caso você não se importe com matrizes tão grandes, acho que você pode usar o que preferir.
fonte
é açúcar
é sal
fonte
É porque
new Array()
é ambíguo. Estes são os construtores corretos:fonte