1

可能重复:
在 javascript 中,测试深度嵌套在对象图中的属性?

我只想运行这个代码块,并且只有当 obj.method1.mthod2 为真时。但是当 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链接,但它没有帮助。

4

3 回答 3

4

我通常这样写:

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

不过,我主要使用函数来执行此操作,因为我很确定某些原始类型的实例会评估为 false,即使它们不是未定义的。

编辑:正如lanzz在评论中指出的那样,obj 需要一个 typeof。

于 2012-10-25T06:58:42.083 回答
0

尝试try

try {
    if(obj.method1.method2) {
         alert("ok!");
    }
}catch(e) {
    alert("obj or some property not defined");
}
于 2012-10-25T07:08:17.693 回答
0

更简洁:

  if (obj && obj.method1 && obj.method1.method2) {
    ...
  }
于 2012-10-25T07:16:54.313 回答