Embora as matrizes sejam objetos em JavaScript, não é recomendável usar um loop for para atravessar uma matriz. De fato, existem muitas razões para nos impedir de usar um loop para matrizes.
Porque o for in loop enumerará todas as propriedades na cadeia de protótipos, e a única maneira de evitá -la é usar o HasownProperty para julgar, que será muito mais lento que o normal para loop.
Traversal
Para um desempenho ideal para atravessar uma matriz, a melhor maneira é usar o clássico para loop.
A cópia do código é a seguinte:
var lista = [1, 2, 3, 4, 5, ...... 100000000];
for (var i = 0, l = list.length; i <l; i ++) {
console.log (lista [i]);
}
Há um truque extra aqui, que é armazenar em cache o comprimento da matriz por l = list.length.
Embora o comprimento da propriedade seja definido na própria matriz, ainda há despesas gerais em cada travessia do loop. Embora os mecanismos JavaScript mais recentes possam ter realizado otimizações de desempenho para essa situação, você não pode garantir que seu código JavaScript sempre seja executado neste navegador.
De fato, os loops sem comprimentos de cache são muito mais lentos que os loops com comprimentos de cache.
atributo de comprimento
Embora o atributo de comprimento retorne apenas o número de elementos na matriz através do método getter, a matriz pode ser truncada pelo método do setter.
A cópia do código é a seguinte:
var foo = [1, 2, 3, 4, 5, 6];
foo.length = 3;
foo; // [1, 2, 3]
foo.length = 6;
foo.push (4);
foo; // [1, 2, 3, indefinido, indefinido, indefinido, 4]
Atribuir um número menor ao atributo de comprimento truncará a matriz e, se atribuído um número maior, ele não truncará a matriz.
Resumir
Para um desempenho ideal, é recomendável usar um loop for para um para um loop enquanto armazenando o atributo de comprimento.
Há também objetos de matriz que não têm método, apenas um comprimento exclusivo do atributo. Objetos de string têm métodos de comprimento ~~