206 votos

¿Crear un objeto vacío en JavaScript con {} o new Object()?

Hay dos formas diferentes de crear un objeto vacío en JavaScript:

var objectA = {}
var objectB = new Object()

¿Hay alguna diferencia en cómo el motor script los maneja? ¿Hay alguna razón para usar uno sobre el otro?

Del mismo modo, también es posible crear un Array vacío utilizando una sintaxis diferente:

var arrayA = []
var arrayB = new Array()

283voto

Már Örlygsson Puntos 6861

Objetos

No hay ninguna ventaja en el uso de new Object(); -- Considerando que {}; puede hacer que su código sea más compacto y más legible.

Para definir objetos vacíos son técnicamente lo mismo. El {} es más corta, más ordenada (menos Java-ish), y le permite rellenar instantáneamente el objeto en línea - así:

var myObject = {
        title:  'Frog',
        url:    '/img/picture.jpg',
        width:  300,
        height: 200
      };

Arrays

En el caso de las matrices, tampoco hay casi ningún beneficio en utilizar new Array(); en []; -- con una pequeña excepción:

var emptyArray = new Array(100);

crea una matriz de 100 elementos con todas las ranuras que contienen undefined -- que puede ser agradable/útil en ciertas situaciones.

Mi recomendación

  1. No utilice nunca new Object(); -- es torpe y parece tonto.
  2. Utilice siempre []; -- excepto cuando necesites crear rápidamente un Array "vacío" con una longitud predefinida.

60voto

Guillermo Snipe Puntos 449

Sí, hay una diferencia, no son lo mismo. Es cierto que obtendrás los mismos resultados, pero el motor funciona de forma diferente para ambos. Uno de ellos es un literal de objeto, 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 string, number, etc... Es muy importante tener esto en cuenta cuando se manejan datos dinámicos para crear objetos..

Muchos autores recomiendan no utilizar el constructor de objetos cuando se puede utilizar en su lugar una determinada notación literal, en la que se estará seguro de que lo que se está creando es lo que se espera tener en el código.

Te sugiero que hagas una lectura adicional sobre las diferencias entre la notación literal y los constructores en javascript para encontrar más detalles.

10voto

Jason Bunting Puntos 27534

Estos tienen el mismo resultado final, pero yo simplemente añadiría que el uso de la sintaxis literal puede ayudar a uno a acostumbrarse a la sintaxis de JSON (un subconjunto de la sintaxis de objetos literales de JavaScript modificado con cadenas), por lo que podría ser una buena práctica para entrar en ella.

Otra cosa: puedes tener errores sutiles si te olvidas de usar el new operador. Por lo tanto, el uso de literales le ayudará a evitar ese problema.

En última instancia, dependerá de la situación y de las preferencias.

6voto

Bobby Jack Puntos 7574
var objectA = {}

es mucho más rápido y, según mi experiencia, más utilizado, por lo que probablemente sea mejor adoptar el "estándar" y ahorrar algo de escritura.

6voto

Thedric Walker Puntos 1252

Creo que {} se recomendó en uno de los vídeos de Javascript en aquí como una buena convención de codificación. new es necesario para la herencia pseudoclásica. el var obj = {}; manera ayuda a recordar que este no es un lenguaje clásico orientado a objetos sino uno prototípico. Por lo tanto, la única vez que realmente necesitaría new es cuando se utilizan funciones constructoras. Por ejemplo:

var Mammal = function (name) {
  this.name = name;
};

Mammal.prototype.get_name = function () {
  return this.name;
}

Mammal.prototype.says = function() {
  return this.saying || '';
}

Entonces se utiliza así:

var aMammal = new Mammal('Me warm-blooded');
var name = aMammal.get_name();

Otra ventaja de utilizar {} en lugar de new Object es que puedes usarlo para hacer literales de objetos al estilo JSON.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X