Crear arrays en JavaScript: acceso, índices y length | Nicolás Garzón
Los arrays pueden crearse desde valores escritos directamente, otras colecciones, objetos similares a arrays o secuencias síncronas y asíncronas.
La forma elegida cambia cómo se interpreta la entrada.
JavaScript
Copiar const literal = [ 10 , 20 , 30 ] ;
const fromIterable = Array. from ( new Set ( [ 10 , 20 , 30 ] ) ) ;
La forma habitual es el literal.
JavaScript
Copiar const products = [ "Keyboard" , "Mouse" ] ;
const empty = [ ] ; Es clara y no tiene comportamientos sorpresa con un único número.
JavaScript
Copiar const values = new Array ( 1 , 2 , 3 ) ;
Con un único número entero, significa longitud, no un elemento.
JavaScript
Copiar const values = new Array ( 3 ) ;
values. length;
values[ 0 ] ; El array contiene tres posiciones vacías, conocidas como holes . No equivale exactamente a [undefined, undefined, undefined].
Por claridad, utiliza normalmente literales o Array.from.
Array.of siempre interpreta sus argumentos como elementos.
JavaScript
Copiar Array. of ( 3 ) ;
Array. of ( 1 , 2 , 3 ) ; Es útil cuando el número de argumentos es dinámico y no quieres la regla especial del constructor.
Convierte un iterable o un objeto array-like en un array nuevo.
JavaScript
Copiar Array. from ( "JS" ) ;
JavaScript
Copiar Array. from ( new Set ( [ 1 , 2 , 2 , 3 ] ) ) ;
También acepta una función de transformación.
JavaScript
Copiar Array. from (
{ length : 4 } ,
( _, index ) => index + 1 ,
) ;
Esto evita el problema de new Array(4).map(...), porque map omite holes.
Un objeto array-like tiene length y propiedades numéricas, pero no necesita implementar el protocolo iterable.
JavaScript
Copiar const arrayLike = {
0 : "A" ,
1 : "B" ,
length : 2 ,
} ;
Array. from ( arrayLike) ; No todos los array-like tienen métodos de array.
JavaScript
Copiar arrayLike. map; Array.fromAsync construye un array a partir de un iterable asíncrono, un iterable síncrono o una fuente similar a array cuyos valores pueden requerir espera.
JavaScript
Copiar const values = await Array. fromAsync (
asyncSource,
) ; También puede transformar durante la lectura.
JavaScript
Copiar const ids = await Array. fromAsync (
asyncSource,
( item ) => item. id,
) ; Forma parte del estándar ECMAScript 2026. Verifica que el runtime objetivo la implemente antes de depender de ella o usa una alternativa compatible cuando sea necesario.
JavaScript
Copiar const values = [ 10 , 20 , 30 ] ;
values[ 0 ] ;
values[ 2 ] ;
values[ 5 ] ; Leer una posición inexistente devuelve undefined.
Eso no permite distinguir por sí solo entre:
Una posición que no existe.
Una posición existente cuyo valor es undefined.
JavaScript
Copiar const values = [ undefined ] ;
values[ 0 ] ;
values[ 1 ] ; Para comprobar existencia propia:
JavaScript
Copiar Object. hasOwn ( values, 0 ) ;
Object. hasOwn ( values, 1 ) ; JavaScript
Copiar const values = [ 10 , 20 , 30 ] ;
values. at ( 0 ) ;
values. at ( - 1 ) ;
values. at ( - 2 ) ; at permite índices negativos desde el final.
JavaScript
Copiar values. at ( - 10 ) ; JavaScript
Copiar const values = [ 10 , 20 , 30 ] ;
values. length; length no cuenta manualmente cuántos valores definidos existen. En general representa una posición por encima del índice numérico más alto.
JavaScript
Copiar const values = [ ] ;
values[ 5 ] = "A" ;
values. length; Las posiciones 0 a 4 quedan vacías.
Reducirla elimina posiciones.
JavaScript
Copiar const values = [ 1 , 2 , 3 , 4 ] ;
values. length = 2 ;
values; JavaScript
Copiar values. length = 5 ;
values. length;
Object. hasOwn ( values, 3 ) ; Modificar length directamente puede ocultar intención. Métodos como slice, splice, push o una nueva copia suelen comunicar mejor la operación.
Las propiedades que afectan length usan nombres de índice dentro del rango admitido por arrays.
JavaScript
Copiar const values = [ ] ;
values[ 0 ] = "A" ;
values[ 1.5 ] = "B" ;
values[ - 1 ] = "C" ; 1.5 y -1 son propiedades normales; no aumentan length como posiciones del array.
JavaScript
Copiar values. length; Evita calcularlo varias veces de forma confusa.
JavaScript
Copiar const last = values. at ( - 1 ) ; JavaScript
Copiar const last = values[ values. length - 1 ] ; Ambas devuelven undefined para un array vacío.
JavaScript
Copiar const matrix = [ [ 1 , 2 ] , [ 3 , 4 ] ] ;
matrix[ 1 ] ?. [ 0 ] ;
matrix[ 5 ] ?. [ 0 ] ; Optional chaining evita intentar leer una posición sobre undefined.
JavaScript no tiene una sintaxis nativa de rango para arrays.
JavaScript
Copiar const range = Array. from (
{ length : 5 } ,
( _, index ) => index,
) ;
Para secuencias grandes o potencialmente infinitas, un iterador o generador puede evitar construir todos los valores de una vez.
JavaScript
Copiar function normalizeCollection ( value ) {
if ( value == null ) {
return [ ] ;
}
if ( Array. isArray ( value) ) {
return [ ... value] ;
}
return Array. from ( value) ;
} La función produce un array propio a partir de una colección compatible.
Usar new Array(3) esperando [3].
Ejecutar new Array(3).map(...) esperando tres llamadas.
Confundir iterable con array-like.
Leer undefined y asumir que la posición existe.
Cambiar length sin considerar que elimina o crea holes.
Utilizar corchetes con índices negativos.
Suponer que length cuenta únicamente elementos definidos.
Usar Array.fromAsync sin comprobar el runtime objetivo.
Los literales son la forma habitual de crear arrays.
new Array(number) crea una longitud con holes.
Array.of(number) crea un elemento.
Array.from convierte iterables y array-like.
Array.fromAsync consume fuentes asíncronas y pertenece a ECMAScript 2026.
at acepta índices negativos.
Leer una posición inexistente devuelve undefined.
length está relacionada con los índices, no con la cantidad de valores definidos.
Reducir length elimina elementos.
¿Qué diferencias existen entre estos arrays?
JavaScript
Copiar const first = new Array ( 3 ) ;
const second = [ undefined , undefined , undefined ] ; Respuesta Ambos tienen length igual a 3, pero first tiene tres holes y second tiene tres propiedades existentes con valor undefined. Object.hasOwn(first, 0) es false; en second es true.
Destructuring y spread en arrays explica cómo extraer posiciones, reunir el resto y crear nuevas colecciones a partir de iterables.