访问未使用try-catch块定义的对象

时间:2014-03-28 12:47:29

标签: javascript try-catch

我希望在不使用try-catch的情况下访问undefined的对象。

这是我的目标:

var obj = {
  par1 : {
    par2 : "Hello"
  }
}

如果我想打印parametro2,我可以这样做:

console.log(obj.par1.par2);

它有效。

<小时/> 但如果par1 ID UNDEFINED,如果我不使用试用,它会崩溃。


obj.par1 = undefined;
  try{
    console.log(obj.par1.par2)
  } catch(e){
    console.log("Error" + e);
  }

有没有办法使用without块处理此try-catch

3 个答案:

答案 0 :(得分:1)

您可以执行类似

的操作
if (obj.par1 && obj.par1.par2) {
    console.log(obj.par1.par2);
}

答案 1 :(得分:1)

var nestedObject = {
  n1: {
    n2: {
      n3: {
        prop: "true"
      }
    }
  }
};



function getNested(obj, key) {
  var bits = key.split(".");
  var o = obj;
  var result;
  var len = bits.length;

  for (var i = 0; i < len; i++) {
    var bit = bits[i];
    console.log(o);
    if (!o[bit]) {
      return undefined;
    }
    o = o[bit];
  }
  return o;
}

alert(getNested(nestedObject, 'n1.n2.n3.prop'));

答案 2 :(得分:0)

如果你需要做很多事情,我建议你写一个帮助函数,可能是这样的:

function getKey(obj, keys) {
  keys = keys.split('.');
  var value = obj;
  if (obj == null) {
    return obj;
  }
  do {
    value = value[keys.shift()];
  } while (value != null && keys.length !== 0);
  return value;
}

var obj = {
  a: {
    b: 'hello',
    c: {
      d: 'world'
    }
  },
  e: 'foo'
};

getKey(obj, 'a.b');    // returns 'hello'
getKey(obj, 'a.c');    // returns { d: 'world' }
getKey(obj, 'a.c.d');  // returns 'world'
getKey(obj, 'e');      // returns 'foo'
getKey(obj, 'f');      // returns undefined
getKey(obj, 'z.x.y');      // returns undefined
getKey(undefined, 'f');// returns undefined
getKey(null, 'f');     // returns null

我希望这会有所帮助。我只用我提供的值来测试它,但它应该可以正常工作。