JSON.stringify()认识

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

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

javascript 复制代码
let obj = {
    name: 'String'
}
console.log(JSON.stringify(obj));   // {"name":"String"}

序列化弊端:

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

序列化扩展:

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

console.log(res);    // {"name":"String"}
JSON.stringify()``第二参数传入一个函数,可遍历修改每一项。
javascript 复制代码
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()第三参数可传入数字,表示缩进多少字符
javascript 复制代码
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 方法才会自动执行,用于自定义数据样式。
javascript 复制代码
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 属性,你会得到函数本身,而不是它的执行结果。

相关推荐
涛涛ing27 分钟前
OpenAI Astra 泄露:零样本生成 3D 网页,前端开发者慌了吗?
前端
ssshooter1 小时前
现在网页都能提供 MCP 了?!
前端·人工智能·程序员
杉氧1 小时前
状态管理变迁史:为什么我们放弃了 Redux 选择 Zustand?
android·前端·react native
SelectDB1 小时前
StarRocks 适合做日志分析吗?
数据分析·json·自动化运维
SelectDB1 小时前
为什么 JSON 正在成为分析数据库新的竞争点?
数据库·json·agent
cidy_981 小时前
OpenCode 手动配置火山方舟 Agent Plan 教程
前端
鹏多多1 小时前
PC 网站接入微信登录,这 10 个坑我替你踩完了!
前端·javascript·vue.js
律宏阔2 小时前
微信小程序使用 Orval + OpenAPI 自动生成接口:Axios 兼容踩坑记录
前端·微信小程序
律宏阔2 小时前
微信小程序集成 TDesign 完整记录:解决 NPM packages not found
前端·微信小程序
律宏阔2 小时前
微信小程序 ECharts 瘦身实战:分包异步化 + componentPlaceholder 避开主包 2MB 限制
前端·微信小程序