以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - JavaScript 代码题
21. 手写JSON.stringify()

function myStringify(obj) {
  // your code here
}

举个例子:

const obj = { 
  message: "hello, world", 
  count: 10,
  nested: { 
    flag: true,
    array: [1, 2, 3] 
  }
};

console.log(myStringify(obj));
// expect output: 
// '{"message":"hello, world","count":10,"nested":{"flag":true,"array":[1,2,3]}}'

另外一个例子:

const obj1 = {
  prop1: "hello",
  prop2: "BFE",
  toString() {
    return `${this.prop1} ${this.prop2}`
  }
}

const obj2 = {
  a: obj1,
  b: [obj1, obj1],
  c: {
    d: obj1,
    e: [obj1, obj1]
  }
}

obj1.self = obj1
obj2.f = obj2

console.log(myStringify(obj2)) 
// expect output: 
// {"a":"hello BFE","b":["hello BFE","hello BFE"],"c":{"d":"hello BFE","e":["hello BFE","hello BFE"]},"self":"[Circular ~]","f":"[Circular ~]"}

要求:

  • 不得使用JSON.stringify()
  • 不得使用eval()等求值函数
  • 不得修改原有的结构体

提示:

  • JSON 中的 Object 与 JavaScript 中的 Object 不一样,JSON 中不允许有函数、不允许有循环引用
  • 可以使用递归
  • 使用 RegExp 判断类型时须考虑全面