Command Palette

Search for a command to run...

Creación de Arrays en JavaScript: Literales, Array.of() y Array.from()

Domina las diferentes formas de crear arrays en JavaScript, desde la sintaxis literal hasta los métodos modernos Array.of() y Array.from(), entendiendo cuándo usar cada uno y los errores comunes a evitar.

Lectura: 10 min
Nivel: Principiante

TL;DR - Resumen rápido

  • El array literal [] es la forma más común y recomendada de crear arrays
  • Array.of() resuelve el problema del constructor Array() con un solo argumento numérico
  • Array.from() convierte iterables y array-like objects en arrays verdaderos
  • El constructor Array() tiene comportamientos inconsistentes que debes conocer
  • Array.from() acepta una función de mapeo opcional para transformar elementos

Introducción a la Creación de Arrays

Los arrays son estructuras de datos fundamentales en JavaScript que te permiten almacenar múltiples valores en una sola variable. Aunque crear un array parece simple, JavaScript ofrece múltiples formas de hacerlo, cada una con sus propias características y casos de uso específicos. Entender estas diferencias te ayudará a escribir código más claro y evitar bugs sutiles.

La forma más común de crear un array es usando la sintaxis literal con corchetes, pero existen constructores y métodos que ofrecen funcionalidades adicionales. Aprender cuándo usar cada uno te dará más flexibilidad y control sobre tus estructuras de datos.

  • Array literal []: La forma más simple y común
  • Constructor Array(): Método tradicional con comportamientos especiales
  • Array.of(): Constructor consistente para crear arrays de valores
  • Array.from(): Convierte iterables y objetos array-like en arrays

¿Por qué existen múltiples formas?

JavaScript evoluciona constantemente. El array literal existe desde los inicios, mientras que Array.of() y Array.from() se introdujeron en ES6 (2015) para resolver problemas específicos del constructor Array(). Conocer la historia te ayuda a entender por qué existen estas alternativas.

Creación con Array Literal

La sintaxis de array literal es la forma más común y recomendada de crear arrays en JavaScript. Usa corchetes [] y es la preferida por su claridad y simplicidad. Esta sintaxis es consistente, intuitiva y no tiene comportamientos sorpresa que puedan causar bugs.

Array Vacío

Para crear un array vacío, simplemente usa corchetes sin contenido. Este es el patrón más común cuando planeas agregar elementos dinámicamente más tarde.

array-vacio.js
Loading code...

Crear un array vacío es útil cuando no conoces de antemano los elementos que contendrá. Es el punto de partida común para operaciones dinámicas como push(), pop() o cuando estás construyendo arrays a partir de datos externos como APIs o inputs del usuario.

Array con Elementos Iniciales

Puedes inicializar un array con elementos separándolos por comas dentro de los corchetes. Los elementos pueden ser de cualquier tipo: strings, números, objetos, otros arrays, o incluso funciones.

array-elementos.js
Loading code...

La flexibilidad de JavaScript permite mezclar diferentes tipos de datos en el mismo array. Aunque es posible, en la práctica es mejor mantener arrays homogéneos (todos elementos del mismo tipo) para mayor claridad y evitar errores en tiempo de ejecución.

Mejor práctica: Usa siempre el array literal

El array literal es la forma más clara, consistente y sin sorpresas de crear arrays. Úsalo como tu opción predeterminada. Solo considera otros métodos cuando tengas un caso de uso específico que los requiera.

Constructor Array.of()

Array.of() es un método estático introducido en ES6 que crea un nuevo array con los argumentos proporcionados. A diferencia del constructor Array(), Array.of() siempre trata cada argumento como un elemento individual, sin importar si es un número. Esto lo hace más consistente y predecible.

Sintaxis Básica de Array.of()

Array.of() acepta cualquier número de argumentos y crea un array con esos elementos. Cada argumento se convierte en un elemento del array, sin excepciones ni comportamientos especiales.

array-of-basico.js
Loading code...

Array.of() resuelve un problema específico del constructor Array(): cuando pasas un solo número al constructor Array(), JavaScript interpreta ese número como la longitud del array en lugar de un elemento. Array.of() elimina esta confusión creando siempre un array con los elementos exactos que le pasas.

¿Cuándo usar Array.of()?

Array.of() es especialmente útil cuando estás creando arrays dinámicamente y no sabes cuántos elementos tendrás, o cuando estás trabajando con funciones que pueden recibir un número variable de argumentos. Es más seguro que el constructor Array() porque no tiene comportamientos especiales.

Diferencia entre Array() y Array.of()

La diferencia crítica entre el constructor Array() y Array.of() se manifiesta cuando pasas un solo número como argumento. Array() interpreta ese número como la longitud del array, mientras que Array.of() siempre lo trata como un elemento.

comparacion-array-of.js
Loading code...

Este comportamiento del constructor Array() es una fuente común de bugs, especialmente cuando trabajas con datos dinámicos. Si recibes un número de una API o input del usuario y lo pasas a new Array(), podrías crear un array vacío de esa longitud en lugar de un array con ese número como elemento. Array.of() elimina este riesgo.

Advertencia: Evita el constructor Array()

El constructor Array() tiene comportamientos inconsistentes que pueden causar bugs difíciles de detectar. Usa el array literal [] o Array.of() en su lugar. Solo considera Array() cuando necesites crear un array con una longitud específica y slots vacíos (un caso de uso muy raro).

Método Array.from()

Array.from() es un método estático poderoso que crea un nuevo array a partir de objetos iterables o array-like. Este método es especialmente útil cuando trabajas con estructuras que no son arrays pero que se comportan de manera similar, como arguments, NodeList, strings, o Sets.

Convertir Iterables a Arrays

Los iterables son objetos que implementan el protocolo de iteración de JavaScript. Array.from() puede convertir strings, Sets, Maps y otros iterables en arrays verdaderos, permitiéndote usar todos los métodos de arrays en ellos.

array-from-iterables.js
Loading code...

Convertir iterables a arrays es útil cuando necesitas usar métodos de array como map(), filter(), reduce() en estructuras que no los tienen nativamente. Por ejemplo, un NodeList del DOM no tiene estos métodos, pero después de convertirlo a array con Array.from(), puedes usarlos libremente.

Array.from() con Función de Mapeo

Array.from() acepta un segundo argumento opcional: una función de mapeo que se aplica a cada elemento durante la creación del array. Esto es más eficiente que crear el array y luego llamar a map(), porque evita crear un array intermedio.

array-from-mapping.js
Loading code...

La función de mapeo recibe tres argumentos: el elemento actual, el índice y el array que se está creando. Esto te permite transformar los elementos durante la creación del array, lo cual es especialmente útil para secuencias numéricas o cuando necesitas normalizar datos.

Patrón útil: Crear secuencias numéricas

Array.from() con una función de mapeo es el patrón más eficiente para crear secuencias numéricas en JavaScript. Puedes crear secuencias de números especificando la longitud y usando el índice para generar cada valor. Esto es más claro que usar bucles for y más eficiente que crear y mapear separadamente.

Objetos Array-Like

Los objetos array-like tienen propiedades de índice numérico y una propiedad length, pero no son arrays verdaderos. El objeto arguments de las funciones y los NodeList del DOM son ejemplos comunes. Array.from() es la forma estándar de convertir estos objetos en arrays.

array-from-arraylike.js
Loading code...

Antes de ES6, los desarrolladores usaban Array.prototype.slice.call(arguments) para convertir arguments a un array. Array.from() es más legible y es la forma moderna recomendada de hacer esta conversión.

Errores Comunes al Crear Arrays

Estos son los errores más frecuentes que encontrarás al crear arrays, especialmente cuando estás aprendiendo JavaScript o migrando código de otros lenguajes. Conocer estos patrones te ayudará a evitar bugs y escribir código más robusto.

Constructor Array() con un Número

El error más común con el constructor Array() es pasar un solo número esperando que sea un elemento, pero JavaScript lo interpreta como la longitud del array. Esto crea un array vacío con slots vacíos en lugar de un array con ese número como elemento.

error-array-numero.js
Loading code...

Este error es particularmente peligroso porque el código parece funcionar (no lanza error), pero crea un array incorrecto. Los slots vacíos se comportan de manera diferente a undefined: no son iterados por forEach(), map() o filter(), lo que puede causar bugs sutiles en tu lógica.

Solución: Usa Array.of() o el array literal

Si necesitas crear un array con un solo número como elemento, usa Array.of(numero) o [numero]. Ambas formas crean el array correcto sin ambigüedad. Nunca uses new Array(numero) a menos que específicamente quieras un array con slots vacíos.

Comas Trailing en Array Literals

Las comas trailing (comas al final del último elemento) son válidas en JavaScript y no crean elementos undefined adicionales. Sin embargo, las comas intermedias sí crean slots vacíos, lo que puede ser confuso si no estás familiarizado con este comportamiento.

error-comas-trailing.js
Loading code...

Las comas trailing son útiles para el control de versiones: cuando agregas un nuevo elemento al final de un array, solo cambias una línea en lugar de dos (agregar el elemento y agregar la coma). Sin embargo, las comas intermedias deben evitarse porque crean arrays con huecos que pueden causar bugs inesperados.

Resumen: Creación de Arrays

Conceptos principales:

  • El array literal [] es la forma más común y recomendada de crear arrays
  • Array.of() crea arrays consistentemente tratando cada argumento como elemento
  • Array.from() convierte iterables y array-like objects en arrays verdaderos
  • El constructor Array() tiene comportamientos especiales con un solo número
  • Array.from() acepta una función de mapeo opcional para transformar elementos

Mejores prácticas:

  • Usa siempre el array literal [] como tu opción predeterminada
  • Usa Array.of() cuando necesites crear arrays dinámicamente de valores
  • Usa Array.from() para convertir iterables o array-like objects a arrays
  • Evita el constructor Array() por sus comportamientos inconsistentes
  • Usa Array.from({length: n}, (_, i) => i) para crear secuencias numéricas