JSON.stringify的几种用法
JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串。
语法: JSON.stringify(value[, replacer[, space]])
参数: value: 必需, 要转换的 JavaScript 值(通常为对象或数组)。 replacer: 可选。用于转换结果的函数或数组。 如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:""。 如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。 space: 可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如:\t。
JSON.stringify()与JSON.parse()的区别
JSON.stringify()的作用是将 JavaScript 对象转换为 JSON 字符串,而JSON.parse()正好相反,可以将JSON字符串转为一个对象。
JSON.stringify()的妙用
1.用来调试对象
控制台直接输出对象可能得不到我们想要的结果
const user = { "name" : "张三", "age" : 18 } console.log(user); [object Object]
因为从对象到字符串的默认转换是“[objectObject]”
因此,我们使用 JSON.stringify()先将对象转换为字符串,然后把结果输入 console 控制台
const user = { "name" : "张三", "age" : 18 } console.log(JSON.stringify(user)); // "{ "name" : "张三", "age" :18 }"
2.存储 localStorage 对象
一些时候,你想存储用户创建的一个对象,并且,即使在浏览器被关闭后仍能恢复该对象。下面的例子是 JSON.stringify
适用于这种情形的一个样板:
// 创建一个示例数据 var session = { 'screens' : [], 'state' : true }; session.screens.push({"name":"screenA", "width":450, "height":250}); session.screens.push({"name":"screenB", "width":650, "height":350}); session.screens.push({"name":"screenC", "width":750, "height":120}); session.screens.push({"name":"screenD", "width":250, "height":60}); session.screens.push({"name":"screenE", "width":390, "height":120}); session.screens.push({"name":"screenF", "width":1240, "height":650}); // 使用 JSON.stringify 转换为 JSON 字符串 // 然后使用 localStorage 保存在 session 名称里 localStorage.setItem('session', JSON.stringify(session)); // 然后是如何转换通过 JSON.stringify 生成的字符串,该字符串以 JSON 格式保存在 localStorage 里 var restoredSession = JSON.parse(localStorage.getItem('session')); // 现在 restoredSession 包含了保存在 localStorage 里的对象 console.log(restoredSession);
3.数组去重
function unique(arr) { let unique = {}; arr.forEach(function(item) { //调整属性顺序 var newData = {}; Object.keys(item).sort().map(key = >{ newData[key] = item[key] }) unique[JSON.stringify(newData)] = item; //键名不会重复 }) arr = Object.keys(unique).map(function(u) { //Object.keys()返回对象的所有键值组成的数组,map方法是一个遍历方法,返回遍历结果组成的数组.将unique对象的键名还原成对象数组 return JSON.parse(u); }) return arr; }
4.实现深拷贝
//深拷贝 function deepClone(data) { let _data = JSON.stringify(data), dataClone = JSON.parse(_data); return dataClone; };
5.判断数组是否包含某对象,或者判断对象是否相等
//判断数组是否包含某对象 let data = [ {name:'echo'}, {name:'前端开发博客'}, {name:'张三'}, ], val = {name:'张三'}; JSON.stringify(data).indexOf(JSON.stringify(val)) !== -1;//true //判断两数组/对象是否相等 let a = [1,2,3], b = [1,2,3]; JSON.stringify(a) === JSON.stringify(b);//true
暂时就是这些了~