在这两种情况下,我都会输出对象的内容:
alert(JSON.stringify(obj));
或
alert(obj.toString());
所以...有什么区别?每个人的优点和缺点是什么?
是否有实际例子来说明差异?
答案 0 :(得分:32)
除非您的自定义.toString
方法的自定义对象返回该对象的JSON.stringify
,否则obj
没有obj.toString() == JSON.stringify(obj)
。{/ p>
当obj
是[1,2,3]
之类的数组时,.toString()
会给出:
"1,2,3"
JSON.stringify
:
"[1,2,3]"
这些是接近但不完全相同的,JSON序列化的一个没有逗号的歧义,直接作为Javascript运行或可以解析为JSON。
请参阅:
["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
答案 1 :(得分:15)
对象说
obj = { a: 'a', '1': 1 }
obj.toString()
给出了
"[object Object]"
JSON.stringify(obj)
给出了
"{"1":1,"a":"a"}"
对于.toString(),当参数类型是对象时,返回默认值。另一方面,JSON.stringify返回JSON文本,可以使用JSON.parse
将其转换回JSON对象答案 2 :(得分:7)
您可能已经注意到,当您尝试(希望)时,调用.toString()
任何对象从Object.prototype.toString()
继承(*),返回[object Object]
。
这是如何在内部定义的,从对象返回内部[Class]
名称。当然,其他对象可以覆盖此方法(记住,它最初只是在原型链上定义)并且几乎可以返回任何内容。
JSON.stringify()
是JSON对象的一种方法,它将对象结构序列化成为字符串版本。因此, Javascript Object Notation ,它将描述一个具有纯 ascii字符串中所有嵌套结构的对象。
(*)exception:使用Object.create(null);
答案 3 :(得分:0)
您可以在JSON.stringify中使用replacer和space参数,将replacer参数作为函数传递,您可以修改object和space参数,从而帮助您在每个键值对之前提供额外的空间。
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}
空格参数-
const obj = { a : 1, b:2};
const obj_str = JSON.stringify(obj, null, ' ');// '\t' gives one tab
console.log(obj_str)
有关更多详细信息,您可以访问此link.