JSON.parse:
将JSON字符串转换成对象,字符串必须符合JSON格式,键都必须使用双引号,故外面引号用单引号;如果值是字符串也用双引号
JSON.parse(text[, reviver])
reviver 函数:
解析值本身以及它所包含的所有属性,会按照一定的顺序(从最最里层的属性开始,一级级往外,最终到达顶层,也就是解析值本身)分别的去调用 reviver 函数。如果 reviver 返回 undefined,则当前属性会从所属对象中删除,如果返回了其他值,则返回的值会成为当前属性新的属性值。
JSON.parse('{"1": 1, "2": 2,"3": {"4": 4, "5": {"6": 6}}}', function (k, v) {
console.log(k); // 输出当前的属性名,从而得知遍历顺序是从内向外的,
// 最后一个属性名会是个空字符串。
return v; // 返回原始属性值,相当于没有传递 reviver 参数。
});
JSON.stringify():
是将 JavaScript 对象转换为 JSON 字符串
- 可判断两个对象是否相等
- 实现对象深拷贝
深拷贝:不仅将原对象的各个属性逐个复制,而且将原对象各个属性所包含的对象也依次采用深拷贝的方法递归复制到新对象上;两个复制 结果不会指向同一片地址;实现隔离。
实现深拷贝原理:
用JSON.stringify 将js对象序列化(JSON字符串),再使用JSON.parse来反序列化(还原)js对象;序列化的作用是存储(对象本身存储的只是一个地址映射,如果断电,对象将不复存在,因此需将对象的内容转换成字符串的形式再保存在磁盘上 )和传输