在这两种情况下,我都会输出对象的内容:
alert(JSON.stringify(obj));
或者
alert(obj.toString());
所以......有什么区别?每一种的优点或缺点是什么?
有没有实际的例子来显示差异?
在这两种情况下,我都会输出对象的内容:
alert(JSON.stringify(obj));
或者
alert(obj.toString());
所以......有什么区别?每一种的优点或缺点是什么?
有没有实际的例子来显示差异?
除非您有一个自定义对象并.toString
返回JSON.stringify
该对象的自定义方法,否则obj
不会给出obj.toString() == JSON.stringify(obj)
.
像thenobj
这样的数组何时给出:[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
对于一个对象说
obj = { a: 'a', '1': 1 }
obj.toString()
给
"[object Object]"
JSON.stringify(obj)
给
"{"1":1,"a":"a"}"
对于.toString(),当参数类型是对象时返回默认值。另一方面, JSON.stringify返回 JSON 文本,可以使用JSON.parse将其转换回 JSON 对象
正如您可能已经注意到的那样,当您尝试(希望如此)时,调用.toString()
任何对象继承(*)的对象Object.prototype.toString()
,返回[object Object]
.
这就是它内部定义的方式,从对象返回内部[Class]
名称。当然,其他对象可以覆盖这个方法(记住,它最初是在原型链上定义的)并返回几乎任何东西。
JSON.stringify()
另一方面,是 JSON 对象的一种方法,它将对象结构序列化为字符串版本。因此,Javascript Object Notation将描述一个具有纯ascii 字符串中所有嵌套结构的对象。
(*) 例外:使用创建的对象Object.create(null);
您可以在 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)
有关更多详细信息,您可以访问此链接。