En ambos casos obtengo en salida el contenido del objeto:
alert(JSON.stringify(obj));
o
alert(obj.toString());
entonces… ¿cuál es la diferencia? ¿Cuáles son las ventajas o desventajas de cada uno?
¿Existen ejemplos prácticos que muestren la diferencia?
A menos que tenga un objeto personalizado con custom .toString
método de retorno JSON.stringify
de ese objeto, no hay obj
eso daría obj.toString() == JSON.stringify(obj)
.
Cuándo obj
es una matriz como [1,2,3]
después .toString()
da:
"1,2,3"
Y JSON.stringify
:
"[1,2,3]"
Estos son similares pero no exactamente iguales, el JSON serializado no tiene ambigüedad con las comas y se ejecuta directamente como Javascript o se puede analizar como JSON.
Ver:
["1,",2,3].toString();
//"1,,2,3" ... so you can't just split by comma and get original array
//it is in fact impossible to restore the original array from this result
JSON.stringify(["1,",2,3])
//'["1,",2,3]'
//original array can be restored exactly
jacob jorge
para un objeto decir
obj = { a: 'a', '1': 1 }
obj.toString()
da
"[object Object]"
JSON.stringify(obj)
da
"{"1":1,"a":"a"}"
Para .Encadenar()se devuelve un valor predeterminado cuando el tipo de argumento es un objeto. JSON.stringify por otro lado, devuelve texto JSON, que se puede volver a convertir en un objeto JSON usando JSON.parse
Como habrás notado, mientras intentabas (con suerte), llamando .toString()
cual alguna el objeto hereda Object.prototype.toString()
de [object Object]
devoluciones
. [Class]
Así es como se define internamente, devolviendo la interna nombre de un objeto. Por supuesto, otros objetos
JSON.stringify()
puede anular este método (recuerde, solo se definió originalmente en la cadena de prototipos) y devolver casi cualquier cosa. por otro lado, es un método del objeto JSON, que tipo de serializa una estructura de objeto en una versión de cadena. Por lo tanto,Notación de objetos Javascript describirá un objeto con todas las estructuras anidadas en purocadena ascii
. Object.create(null);
const replacer = (key, value) => {
// Filtering out properties
if (typeof value === 'number') {
return 1;
}
return value;
},
foo = {
country: 'India',
state: 'Gujarat',
district: 45,
cm: 'car',
am: 7
},
result = JSON.stringify(foo, replacer);
console.log(result) // {"country":"India","state":"Gujarat","district":1,"cm":"car","am":1}
excepción: objetos creados con
const obj = { a : 1, b:2};
const obj_str = JSON.stringify(obj, null, ' ');// '\t' gives one tab
console.log(obj_str)
Puede usar el parámetro de reemplazo y espacio en JSON.stringify, pasar el argumento de reemplazo como una función puede modificar el objeto y el parámetro de espacio lo ayuda a dar espacio adicional antes de cada par de valores clave. Argumento del espacio –
prueba jsperf para una matriz simple
– vsync
7 julio 2018 a las 16:10