0
点赞
收藏
分享

微信扫一扫

云原生(Cloud Native)简单介绍

Mhhao 2024-02-24 阅读 9

深浅拷贝:JSON.parse(JSON.stringify(obj))

序列化:将对象转换为JSON字符串

let obj = {
name: 'String'
}
console.log(JSON.stringify(obj)); // {"name":"String"}

序列化弊端:

对象属性值为函数序列化后属性丢失。
let obj = {
name: 'String',
foo: function () {
console.log(`${ this.name }是一个小菜鸟!`)
}
}
console.log(JSON.stringify(obj)); // {"name":"String"}
对象属性值为undefined序列化后该属性会丢失。
let obj = {
name: undefined
}
console.log(JSON.stringify(obj)); // {}
对象属性值正则表达式序列化后该属性为{}
let obj = {
name: 'String',
zoo: /^i/ig,
foo: function () {
console.log(`${ this.name }是一个小菜鸟!`)
}
}
console.log(JSON.stringify(obj)); // {"name":"String","zoo":{}}
数组含对象,对象属性值为undefined序列化后该属性也会丢失。
let arr = [
{
name: undefined
}
]
console.log(JSON.stringify(arr)); // [{}]

序列化扩展:

JSON.stringify()第二参数传入一个数组,值为对象key,可获取该项。
let obj = {
name: 'String',
age: 25,
hobby: ['JavaScript', 'Vue']
}
let res = JSON.stringify(obj, ['name']);

console.log(res); // {"name":"String"}
JSON.stringify()第二参数传入一个函数,可遍历修改每一项。
let obj = {
name: 'String',
age: 25,
hobby: ['JavaScript', 'Vue']
}
let res = JSON.stringify(obj, (key, value) => {
if (key === 'age') return undefined;
return value;
});

console.log(res); // {"name":"String","hobby":["JavaScript","Vue"]}
JSON.stringify()第三参数可传入数字,表示缩进多少字符
let obj = {
name: 'String',
age: 25,
hobby: ['JavaScript', 'Vue']
}
let res = JSON.stringify(obj, null, 2);

console.log(res); // 表示缩进2行

// {
// "name": "String",
// "age": 25,
// "hobby": [
// "JavaScript",
// "Vue"
// ]
// }
Object自身含有toJSON属性,只有被JSON.stringify() 调用时,toJSON 方法才会自动执行,用于自定义数据样式。
let obj = {
name: '小明',
age: 25,
toJSON: function () {
return {
message: `${ this.name }的年龄为${ this.age }`
}
}
}
let res = JSON.stringify(obj);

console.log(res); // {"message":"小明的年龄为25"}

注:toJSON 方法只在 JSON.stringify() 被调用时起作用。如果你直接访问对象的 toJSON 属性,你会得到函数本身,而不是它的执行结果。

举报

相关推荐

0 条评论