在这两种情况下,我都会输出对象的内容:
alert(JSON.stringify(obj));
Run Code Online (Sandbox Code Playgroud)
要么
alert(obj.toString());
Run Code Online (Sandbox Code Playgroud)
所以...有什么区别?每个人的优点和缺点是什么?
是否有实际例子来说明差异?
Esa*_*ija 35
除非你有一个自定义对象的自定义.toString方法返回JSON.stringify该对象的,没有obj,这将使obj.toString() == JSON.stringify(obj).
当obj是一个数组像[1,2,3]然后.toString()给出:
"1,2,3"
Run Code Online (Sandbox Code Playgroud)
而且JSON.stringify:
"[1,2,3]"
Run Code Online (Sandbox Code Playgroud)
这些是接近但不完全相同的,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
Run Code Online (Sandbox Code Playgroud)
Jac*_*rge 18
对象说
obj = { a: 'a', '1': 1 }
Run Code Online (Sandbox Code Playgroud)
obj.toString() 给
"[object Object]"
Run Code Online (Sandbox Code Playgroud)
JSON.stringify(obj) 给
"{"1":1,"a":"a"}"
Run Code Online (Sandbox Code Playgroud)
对于.toString(),当参数类型是对象时,将返回默认值.另一方面,JSON.stringify返回JSON文本,可以使用JSON.parse将其转换回JSON对象
正如你可能已经注意到,当你尝试(希望),调用.toString()其中的任何对象继承(*)的Object.prototype.toString(),退货[object Object].
这是如何在内部定义的,[Class]从对象返回内部名称.当然,其他对象可以覆盖此方法(记住,它最初只是在原型链上定义)并返回几乎任何东西.
JSON.stringify()另一方面,是JSON对象的一种方法,它将对象结构序列化为字符串版本.因此,Javascript Object Notation,它将描述一个具有纯ascii字符串中所有嵌套结构的对象.
(*)exception:使用创建的对象 Object.create(null);