在项目中针对一些复杂结构的对象、数组等深层次数据进行数据转换<对象转字符串>的过程中<JSON.stringify()>,我们会发现如果在对象或者数组中设置一些function的键sh值对,当转换以后,该方法就会丢失,如下:
var obj = {
name:'骚饼',
age:'3',
fn:function(){
console.log(this.name + this.age)
}
}
obj;
上述代码执行以后可以看到如下结果
但是如果当我们使用JSON.parse(JSON.stringify()) 实现深拷贝以后,会发现fn方法丢失
这时候我们可以使用eval进行数据的转换处理,封装了如下方法,大家可以复制到项目进行使用
//更正:形参key修改
function JSONParse(str) {
return JSON.parse(str, (k, v) => {
if (typeof v === 'string' && v.indexOf && v.indexOf('h =>') > -1) return eval(`(() =>{return ${v}})()`)
return v
})
}