判断javascript是否是循环引用


我理解的javascript中的循环引用指的是:一个对象在它的内部引用了本身。


javascript中循环引用会造成内存泄漏问题,要避免循环引用。js中如何判断是否有循环引用,有如下方式:


1、利用JSON.stringfy()方法特性来判断,若存在循环引用,会抛出异常。

function isCycle(obj){
  try {
      JSON.stringify(obj);
      return false;
  } catch (e) {
    return true;
  }
}



2、利用空数组,每次遍历时存储一份变脸对象,判断数组中是否存在已遍历过的对象,若存在,则说明存在循环引用。

function isCyclic (obj) {
  var seenObjects = [];
 
  function detect (obj) {
    if (typeof obj === 'object') {
      if (seenObjects.indexOf(obj) !== -1) {
        return true;
      }
      seenObjects.push(obj);
      for (var key in obj) {
        if (obj.hasOwnProperty(key) && detect(obj[key])) {
          return true;
        }
      }
    }
    return false;
  }
 
  return detect(obj);
}
确认 取消