关于js中含有函数的对象与String字符串的相互转换
2023年7月10日大约 2 分钟
关于js中含有函数的对象与String字符串的相互转换
1.含有函数的对象转为JSON
利用JSON.stringify将对象转为字符串
//params为传入的对象
JSON.stringify(params,function(key,val){
if (typeof val === 'function') {
return val + '';
}
return val;
})2.JSON字符串转换为对象
利用JSON.parse
function parseJson (str: string) {
return JSON.parse(str, (k, v) => {
if (v.indexOf && v.indexOf('function') > -1) {
return eval("(function(){return " + v + " })()")
}
return v;
})
}这里利用eval函数将字符串转为可执行函数
关于eval函数,现代已经很少使用了,但是存在确实是有道理的。

背景
「关于js中含有函数的对象与String字符串的相互转换」属于语言语义边界主题。该类问题在重构阶段最容易引发“代码没报错但行为变了”的隐性风险。
核心原理
需要同时理解语法定义与运行时行为:作用域、提升规则、this 绑定、短路语义、类型判定边界。
实现方式 / 示例
建议每个结论都配“正例 + 反例 + 适用边界”,并明确推荐写法与禁用写法。
常见问题
- 只背结论,不验证边界。
- 在不同场景复用同一写法,忽略语义差异。
- 序列化与反序列化策略不统一时,兼容性与执行安全问题会反复出现。
最佳实践
将知识点同步到 ESLint 规则、代码评审清单与模板代码,形成自动化约束。
总结
围绕「关于js中含有函数的对象与String字符串的相互转换」的关键不是记忆语法,而是把语义边界沉淀为可执行规范。
