单行检查是否定义了对象及其方法

时间:2012-10-25 06:55:38

标签: javascript undefined

  

可能重复:
  In javascript, test for property deeply nested in object graph?

我只想运行此代码块,并且只有当obj.method1.mthod2为true时才运行。 但是当obj本身没有被定义时可能就是这种情况。或者method1未定义。

if (obj.method1.method2) {

}

我应该这样做吗?

if (typeof(obj)!="undefined" && typeof(obj.method1)!="undefined" && typeof(obj.method1.method2)!="undefined" && obj.method1.method2) {

}

看起来很难看!任何方式做得更短? 我看过这个Detecting an undefined object property链接,但没有帮助。

3 个答案:

答案 0 :(得分:4)

我通常这样写:

if (typeof(obj) != "undefined" && obj.method1 && obj.method1.method2){
    // The magic
}

我主要使用函数执行此操作,因为我非常确定某些基本类型的实例会评估为false,即使它们未定义。

编辑:由于 lanzz 在评论中指出,obj需要一个typeof。

答案 1 :(得分:0)

尝试try

try {
    if(obj.method1.method2) {
         alert("ok!");
    }
}catch(e) {
    alert("obj or some property not defined");
}

答案 2 :(得分:0)

更简洁:

  if (obj && obj.method1 && obj.method1.method2) {
    ...
  }