将之前写的判断链表是否有环的方法扩展到所有对象,写一个函数has_cycle判断任何一个对象是否有循环引用的情况。

    答案:

    1. function has_cycle(obj, m = new WeakMap()){
    2. if(typeof obj !== 'object') {return false}
    3. if(m[obj]) return true
    4. m[obj] = true
    5. const props = Object.getOwnPropertyNames(obj)
    6. return !!props.find(prop => has_cycle(obj[prop], m)) || false
    7. }