Oi, Luciano, tudo bem?
Muito bem pontuado! De fato, um array como [,,,]
tem "espaço" para 4 elementos, mas existe um motivo para o JavaScript contar que o tamanho dele é apenas 3.
Considere o seguinte array vazio:
const arrayVazio = [];
console.log(arrayVazio.length);
O console.log
irá imprimir o valor 0, pois não há nenhum elemento no array. Mas se pararmos para pensar, ele possui "espaço" para um elemento, não é? Entretanto, não faria sentido um array vazio ter comprimento 1.
Agora, vamos colocar apenas uma vírgula dentro do array e ver o que acontece:
const arrayVazio = [,];
console.log(arrayVazio.length);
Veremos o número 1 no terminal! Da mesma forma que no array anterior, este possui "espaço" para dois elementos, mas a propriedade length
contabiliza seu tamanho como 1. Além disso, seria estranho se a propriedade length
saltasse de 0 para 2 apenas com a adição de uma vírgula.
Agora, vamos analisar o seguinte caso:
const arrayVazio = [,10];
console.log(arrayVazio.length);
Agora, no terminal, veremos o número 2! O array continua com apenas uma vírgula, mas como adicionamos um valor depois dela, agora o javascript entende que ele tem uma posição vazia e uma posição com o número 10.
Por fim, vamos considerar mais um caso:
const arrayVazio = [,10,];
console.log(arrayVazio.length);
Com o código acima, continuaremos vendo o número 2 no terminal. Da mesma forma, um array [10,]
também tem tamanho 1, assim como um array [10]
. Ou seja, podemos concluir que o javascript ignora o último espaço vazio de um array para a contagem do seu tamanho (note que isso vale até mesmo para quando o último espaço vazio é o único do array). Isso faz sentido para a contagem dos tamanhos dos arrays esparsos, se consideramos desde o array de tamanho 0.
Espero ter ajudado! Abraços e bons estudos :)