¿Crear un objeto vacío en JavaScript con {} o nuevo Objeto()?
Hay dos formas diferentes de crear un objeto vacío en JavaScript:
var objectA = {}
var objectB = new Object()
¿Hay alguna diferencia en cómo los maneja el motor de script? ¿Hay alguna razón para usar uno sobre el otro?
De manera similar, también es posible crear una matriz vacía usando una sintaxis diferente:
var arrayA = []
var arrayB = new Array()
Objetos
No hay ningún beneficio al usar new Object()
, mientras que {}
puede hacer que su código sea más compacto y legible.
Para definir objetos vacíos, son técnicamente iguales. La {}
sintaxis es más corta, más clara (menos estilo Java) y le permite completar instantáneamente el objeto en línea, así:
var myObject = {
title: 'Frog',
url: '/img/picture.jpg',
width: 300,
height: 200
};
matrices
Para las matrices, casi no hay ningún beneficio en usar new Array()
over []
, con una pequeña excepción:
var emptyArray = new Array(100);
crea una matriz de 100 elementos de largo con todas las ranuras que contienen undefined
, lo que puede ser bueno/útil en ciertas situaciones (como (new Array(9)).join('Na-Na ') + 'Batman!'
).
Mi recomendación
- Nunca lo uses
new Object();
: es más tosco{}
y parece tonto. - Úselo siempre
[]
, excepto cuando necesite crear rápidamente una matriz "vacía" con una longitud predefinida.
Sí, hay una diferencia, no son iguales. Es cierto que obtendrás los mismos resultados pero el motor funciona de forma diferente en ambos. Uno de ellos es un objeto literal y el otro es un constructor, dos formas diferentes de crear un objeto en javascript.
var objectA = {} //This is an object literal
var objectB = new Object() //This is the object constructor
En JS todo es un objeto, pero debes tener en cuenta lo siguiente con new Object(): puede recibir un parámetro y, dependiendo de ese parámetro, creará una cadena, un número o simplemente un objeto vacío.
Por ejemplo: new Object(1)
devolverá un número. new Object("hello")
devolverá una cadena, significa que el constructor del objeto puede delegar -dependiendo del parámetro- la creación del objeto a otros constructores como cadena, número, etc... Es muy importante tener esto en cuenta cuando gestionas datos dinámicos para crear objetos..
Muchos autores recomiendan no usar el constructor de objetos cuando en su lugar puedes usar una determinada notación literal, donde estarás seguro de que lo que estás creando es lo que esperas tener en tu código.
Le sugiero que siga leyendo sobre las diferencias entre notación literal y constructores en javascript para encontrar más detalles.