这些嵌套的'if typeof(bla)else'语句可以缩短吗?

Bik*_*ire 2 javascript

我有一段像这样的代码.这段代码有效,但看起来很糟糕.

if(typeof(d.object) != "undefined"){
  if(typeof(d.object.property) != "undefined"){
    if(typeof(d.object.property.length) != "undefined"){
      // do the code
    }
    else alert("error");
  }
  else alert("error");
}
else alert("error");
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以重写,所以它做同样但更有效.特别是因为错误都是一样的.

Den*_*ret 7

假设你property对它的长度是否为null或者0(或者更常见的是由Jan Dvorak建议的"假")感兴趣,那么即使不使用try/catch以下内容,你也可以使它更具可读性:

if (d && d.object && d.object.property && d.object.property.length){

} else {
   alert('error');
}
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,这是要走的路.

关于来自MDN的"falsy" :

任何未定义的值,null,0,NaN或空字符串("")以及任何对象(包括值为false的Boolean对象)在传递给条件语句时计算结果为true

  • @Asad是的,但这很可能是一个改进.这就是为什么我预先设定"假设你对房产的长度不感兴趣,如果它是零或0" (2认同)