缺点:
- 时间对象将变为字符串的形式
- RegExp(正则表达式的缩写)、Error对象,则序列化的结果将只得到空对象
- 函数、undefined,则序列化的结果会把函数或 undefined丢失
- NaN、Infinity和-Infinity,则序列化的结果会变成null
- 只能序列化对象的可枚举的自有属性,如new对象,会丢弃对象的constructor
优点:
- 判断数组是否包含某对象,或者判断对象是否相等
let data = [
{name:'echo'},
{name:'听风是风'},
{name:'11'},
],
val = {name:'11'};
console.log(JSON.stringify(data).indexOf(JSON.stringify(val)) !== -1);
console.log(data.indexOf(val) !== -1)
//因为数组和对象是引用值不能比较,所以需要序列化一下转成字符串
- 判断两数组/对象是否相等
let a = [1,2,3],
b = [1,2,3];
JSON.stringify(a) === JSON.stringify(b);//true
JSON.stringify()与toString()这两者虽然都可以将目标值转为字符串,但本质上还是有区别的,比如
let arr = [1,2,3];
console.log(JSON.stringify(arr));//'[1,2,3]'
console.log(arr.toString());//1,2,3
// 都是字符串,但是结果不同
建议阅读:深拷贝与浅拷贝