报错
最近开发一个项目,需要后台返回一个字符串对象数组(json格式的属性值),结果我将请求回来的数据JSON.parse(objStr)序列化后报错了,后来发现是后台返回的属性值字符串,带有换行和空格,让后台去掉换行符和空格就不报错了。。。
最近开发一个项目,需要后台返回一个二维码,所以后台返回给我一串base64格式的字符串。本以为直接img标签渲染即可,但死活不出来,以为我的方法有问题,一直在查找。后来发现是后台返回的base64图片格式的字符串 带有换行和空格,写了一个方法去掉换行和空格,图片立马渲染成功(吐槽一下。。)
其他案例
如果 JSON.parse(JSON.stringify(config)) 报错,通常是因为被拷贝的对象包含了无法被 JSON 序列化的数据类型,比如函数或循环引用。
函数和循环引用是无法通过 JSON 序列化的,因为 JSON 格式只支持基本数据类型和简单的数据结构(如对象和数组),无法表示函数和循环引用。
解决该问题的一种方法是使用深拷贝的递归方法,如上述第一种方法。下面是一个基于递归的深拷贝函数的示例代码:
function deepCopy(obj, visited = new WeakMap()) {
// 非对象或null直接返回
if (typeof obj !== 'object' || obj === null) {
return obj;
}
// 处理循环引用
if (visited.has(obj)) {
return visited.get(obj);
}
let copy = Array.isArray(obj) ? [] : {};
visited.set(obj, copy);
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
copy[key] = deepCopy(obj[key], visited);
}
}
return copy;
}
请注意,即使使用递归方法,如果要深拷贝的对象中仍存在函数或循环引用,仍然可能导致问题。在深拷贝对象时,请确保要拷贝的对象不包含这些特殊情况。