检查链式对象表单中未定义属性的最佳实践是什么?

时间:2016-04-12 01:01:48

标签: javascript

让我们说我在单独的文件中实施a.b.c.d

因此,我需要检查a,b,c是否定义并在未定义这些属性时回退到catch子句中。

目前,我正在使用此代码。但它太长,太脏,难以维护。

try{
  if(!("a" in window)) {
    throw new Error();
  }
  if(!("b" in a)) {
    throw new Error();
  }
  if(!("c" in a.b)) {
    throw new Error();
  }
} catch(e){ }

最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

您在每种情况下手动抛出错误,但是当您尝试访问undefined属性时的行为是抛出ReferenceError,所以您可以抓住它:< / p>

try{
  a.b.c.d
} catch(e){ // Either a, a.b, or a.b.c was undefined }

答案 1 :(得分:-2)

if !(a && a.b && a.b.c && a.b.c.d) {
  throw new Error();
}
// else a.b.c.d exists