🧺 Arrays en JavaScript (y sus partes feas)
Según la especificación ECMAScript (10.4.2), un Array en JavaScript es un exotic object, es decir, un objeto con comportamiento especial en ciertas propiedades.
An Array is an exotic object that gives special treatment to array index property keys.
A property whose name is an array index is also called an element. Every Array has a non-configurable
"length"property whose value is always a non-negative integer less than 232.
En español: los arrays son como objetos, pero con reglas especiales para sus índices numéricos y la propiedad length.
🔍 Explorando el comportamiento extraño
let a = [];
a[0] = 1;
console.log(a.length); // 1
a["foo"] = 2;
console.log(a.length); // 1 ← no cambia
a["13"] = 44;
console.log(a.length); // 14
console.log(a);
// [1, empty × 12, 44, foo: 2]
Acá empiezan las partes «feas» de los arrays: aunque parecen listas simples, en realidad son objetos híbridos que pueden tener claves arbitrarias.
😬 Las reglas no tan lindas de los arrays
- 🧮 Si agregás un elemento con un índice numérico válido, el
lengthse incrementa. - 🔧 Podés (aunque no deberías) agregar propiedades como
a["foo"] = 2. No afectan allength, porque no son índices válidos. - 🚧 Si usás un índice numérico «alto» (por ejemplo
a[13] = 44), JavaScript salta los valores intermedios y deja elementos vacíos («holes«). Aun así,lengthse ajusta automáticamente.
Esto explica por qué podés tener un array con length = 14 y solo dos valores definidos realmente.
💡 Consejos prácticos
- Usá arrays como listas simples siempre que puedas (sin propiedades sueltas tipo
a.foo). - Si necesitás almacenar pares clave/valor, mejor usá
ObjectoMap. - Para trabajar con arrays escasos (sparse), cuidado al usar métodos como
forEach, que ignoran los «holes».
🔗 Recursos útiles
Deja un comentario