以下为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的序列化和反序列化,满足题目要求。