### 题目javascript
JSON.stringify 的功能是,将一个 javascript 字面量对象转化为一个JSON格式的字符串。例如java
const obj = {a:1, b:2} JSON.stringify(obj) // => '{"a":1,"b":2}'
当要转化的对象有“环”存在时,为了不死循环,JSON.stringify 会抛出异常,例如:json
const obj = { foo: { name: 'foo' }, bar: { name: 'bar' baz: { name: 'baz', next: null // 将指向obj.bar } } } obj.bar.baz.next = obj.bar JSON.stringify(obj) // => TypeError: Converting circular structure to JSON
假设入参是字面量对象,属性名是字符串,属性值要么是数字字面量,要么是字面量对象,不考虑json排版,JSON.stringify的简化版实现以下:函数
/** * “环”检查器 */ function detectorCircular(obj) { // 请实现 } /** * JSON.stringify简化实现 * @param obj 要转化为字符串的对象 * @param ignoreCircular 是否忽略“环”检查 */ function stringify(obj, ignoreCircular = false) { if (!ignoreCircular && detectorCircular(obj)) { throw new TypeError('Converting circular structure to JSON') } const keys = Object.keys(obj) if (!keys.length) { return '{}' } const content = keys.map(key => { const value = obj[key] if (typeof value === 'number') { return `"${key}":${value}` } else { return `"${key}":${stringify(value, true)}` } }).join(',') return `{${content}}` }
请实现上述代码中的 detectorCircular 函数。code