使用toString()与JSON.stringify()相比有什么区别?

时间:2013-04-05 12:36:39

标签: javascript

在这两种情况下,我都会输出对象的内容:

alert(JSON.stringify(obj));

alert(obj.toString());

所以...有什么区别?每个人的优点和缺点是什么?

是否有实际例子来说明差异?

4 个答案:

答案 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.