【发布时间】:2011-06-10 06:38:18
【问题描述】:
例如下面的代码
如果(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' ) throw 'nada'; } 捕捉(e){ nonblockAlert('相关消息'); 返回; };这是可行的,因为由于 attr 不存在而引发的错误被本地 throw() 捕获。问题是语法不适合普通的 if then else 控件。
【问题讨论】:
-
这基本上是我所知道的最好的方式。
-
@Mauvis - 你认为有什么方法可以普遍捕获特定错误并让语句通过吗?
-
总是有
window.onerror;) -
只是出于好奇,您的函数期望接收什么样的代码路径,是否有可能真正的数据是(obj 可能为 null?obj.foo 可能为 null?obj.foo。 bar 可能为空?等等)我不了解您,但是当我有这样的数据结构或深层对象时,每个子节点都可能为空的机会很少,并且表明重新设计可能会有所帮助。通常,如果您在一个对象中有一个属性,那么其余的“模式”应该被很好地定义。
标签: javascript object syntax