以下为ChatGPT自动生成的解答,正确与否请自行判断。
BFE.devAI解答 - JavaScript 代码题
144. 序列化和反序列化JSON不支持的数据类型
实现该功能的方法是通过JSON.stringify()函数的第二个参数,在其中添加一个自定义的replacer函数,对需要序列化的数据进行处理,再将处理后的结果传给JSON.parse()进行反序列化。
下面给出代码实现:
function serialize(obj) {
return JSON.stringify(obj, (key, value) => {
// 处理 BigInt 类型
if (typeof value === 'bigint') {
return value.toString() + 'n';
}
// 处理 undefined 和 NaN
if (value === undefined || Number.isNaN(value)) {
return '__' + String(value);
}
// 其他数据类型直接返回
return value;
});
}
function deserialize(str) {
return JSON.parse(str, (key, value) => {
// 判断是否是 BigInt 类型
if (typeof value === 'string' && /^-?\d+n$/.test(value)) {
return BigInt(value.slice(0, -1));
}
// 判断是否是 undefined 或 NaN
if (typeof value === 'string' && value.slice(0, 2) === '__') {
return (value === '__undefined') ? undefined : NaN;
}
// 其他数据类型直接返回
return value;
});
}
该函数可以成功实现对BigInt、undefined和NaN的序列化和反序列化,满足题目要求。