例如,以下代码

  if(obj.attr1.attr2.attr3.attr4 =='常量')返回;


需要重写为

  如果(obj.attr1
      && obj.attr1.attr2
      && obj.attr1.attr2.attr3
      && obj.attr1.attr2.attr3.attr4 =='constant')返回;


我是否正确,因为每个层都需要单独进行测试,或者在语法上有捷径吗?

如果这只是一次尝试,就不会有问题,但是这种结构会渗透到我的代码中。





从答案中,这是我就地拥有的解决方案:

尝试{if(obj.attr1.attr2.attr3.attr4!='const')抛出'nada'; }抓住{e} {
    nonblockAlert('相关消息');
    返回;
};


这是可行的,因为为attr不存在而引发的错误是由本地throw()捕获的。问题是语法不适合常规的if否则else控件。

最佳答案

正如人们提到的,但没有人做过,您可以使用try / catch:

try {
    if(obj.attr1.attr2.attr3.attr4 == 'constant') return;
} catch(e) {}


它不是有史以来最好的代码,但它是最简洁易读的代码。避免这种情况的最好方法就是不要将如此深的树嵌套得如此之深。

10-06 08:07