1、直接判断对象不为null
if (!myObj) {
var myObj = { };
}
Javascript语言是"先解析,后运行",解析时就已经完成了变量声明
2、使用window对象判断某对象是否存在
if (!window.myObj) {
var myObj = { };
}
3、使用this对象判断某对象是否存在
if (!this.myObj) {
this.myObj = { };
}
在某些运行环境中(比如V8、Rhino),window未必是顶层对象。所以,考虑改成this进行判断,在全局变量的层面中,this关键字总是指向顶层变量,所以就可以独立于不同的运行环境。
4、方法三这样写可读性较差,而且this的指向是可变的,容易出错,所以进一步改写:
var global = this;
if (!global.myObj) {
global.myObj = { };
}
if (typeof myObj == "undefined") {
var myObj = { };
}
第一种利用try.catch
function cycleDetector (obj) { // 请添加代码
let result = true; try { JSON.stringify(obj);
} catch (e) {
result = false;
} finally { return result;
}
}
第二种就是利用递归检查任意父子关系的地址引用是否相同