JSON.stringify () y objetos JavaScript

Estoy pensando que tal vez me perdí algo en JavaScript que estoy captando ahora.

Probé este código en la consola de Chrome:

a = [];
a.name = "test";
JSON.stringify(a); 
// which returns value []
a = new Object();
a.name = "test";
JSON.stringify(a); 
// which returns value {"name":"test"}

¿Cuál es la diferencia? Pensé que el nuevo Object () era una cosa de Microsoft JScript. ¿Qué me estoy perdiendo? Debe haber pasado algo por alto en alguna especificación. Gracias.

preguntado el 16 de mayo de 11 a las 17:05

"¿Pensé que el nuevo Object () era una cosa de Microsoft JScript?" No, en absoluto. Eso es JavaScript estándar (aunque es detallado, solo use {} en su lugar, que funciona bien tanto en JScript como en otras implementaciones de ECMAScript). -

5 Respuestas

a = new Object()

y

a = []

no son equivalentes. Pero,

a = {}

y

a = new Object()

son.

Respondido el 13 de Septiembre de 15 a las 17:09

Está bien. Gracias. Siento que ahora recibo mi tonta pregunta del premio del día. - BuddyJoe

new Object() es equivalente a {} (excepto cuando no se deba a extraños problemas de redefinición, pero ignórelo por ahora). [] es equivalente a new Array(), a la que luego agregas una .name propiedad. JSON encadena matrices de una manera especial que no captura la asignación de propiedad arbitraria a la matriz en sí.

contestado el 16 de mayo de 11 a las 21:05

Para los datos JSON, las matrices están diseñadas para tener índices numéricos y los objetos tienen pares clave / valor.

a = [];
a[ 0 ] = "test";

JSON.stringify(a); // returns value ["test"]

contestado el 16 de mayo de 11 a las 21:05

Si estas usando [] para definir su objeto, que en realidad es una matriz, pero dependiendo del idioma del que proviene, podría ser confuso porque no es una matriz asociativa.

Los objetos predeterminados son todos mapas de clave-> datos y se instancian con llaves {}

Si

a = {};
a.name = "test";
JSON.stringify(a); 

Deberia de funcionar.

contestado el 16 de mayo de 11 a las 21:05

"... podría resultar confuso porque no es una matriz asociativa" En realidad, es más confuso que eso, porque is una matriz asociativa y las claves no numéricas (nombres de propiedad) son perfectamente válidas en JavaScript, ya que las matrices no son realmente matrices. Pero se eliminarán si convierte la matriz a JSON, porque la notación de matriz JSON no permite claves no numéricas (por una buena razón, muy pocos idiomas las admitirían). - TJ Crowder

Configurando el name La propiedad de una matriz no afecta su forma serializada (JSON-stringified). No pone una entrada en la matriz. Para hacer eso, necesitas a.push('test').

Los objetos son partes estándar de Javascript (ver, por ejemplo, el Documentos MDC). La forma normal de crear un objeto es con {}, pero new Object() también funciona

Asi que...

var a = [];
a.push('test');
JSON.stringify(a); //"["test"]"

a = {};
a.name = 'test';
JSON.stringify(a); //"{"name":"test"}"

contestado el 16 de mayo de 11 a las 21:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.