Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在不使用try-catch块的情况下访问未定义的对象_Javascript_Try Catch - Fatal编程技术网

Javascript 在不使用try-catch块的情况下访问未定义的对象

Javascript 在不使用try-catch块的情况下访问未定义的对象,javascript,try-catch,Javascript,Try Catch,我想访问未定义的对象,而不使用try-catch 这是我的目标: var obj = { par1 : { par2 : "Hello" } } 如果要打印参数2我可以执行以下操作: console.log(obj.par1.par2); 它是有效的 但是如果par1idUNDEFINED如果我不使用try-catch,它就会崩溃 有没有一种方法可以在不使用try catch块的情况下处理此 if (obj.par1 && obj.par1.par2) {

我想访问
未定义的对象,而不使用try-catch

这是我的目标:

var obj = {
  par1 : {
    par2 : "Hello"
  }
}
如果要打印
参数2
我可以执行以下操作:

console.log(obj.par1.par2);
它是有效的


但是如果
par1
id
UNDEFINED
如果我不使用try-catch,它就会崩溃



有没有一种方法可以在不使用try catch
块的情况下处理此

if (obj.par1 && obj.par1.par2) {
    console.log(obj.par1.par2);
}
var nestedObject={
n1:{
n2:{
n3:{
道具:“真的”
}
}
}
};
函数getNested(对象,键){
变量位=键拆分(“.”);
var o=obj;
var结果;
var len=位长度;
对于(变量i=0;i
如果您需要经常这样做,我建议您编写一个助手函数,可以是这样的:

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

我希望这有帮助。我只使用我提供的值进行了测试,但它应该可以正常工作。

par1
未定义的
时,您希望得到什么值?我不希望它在不使用try-catch的情况下崩溃,然后必须对它进行评估,对吗?你希望这个“东西”是什么?好吧,但我需要用最好的方式去做,因为我可能会有更深层次的目标。我的第一反应是问你为什么要这样做。这似乎是一个您不应该遇到的问题,可以通过重新分解代码库的其他部分来解决。无论如何,我会尽力回答你的问题。接下来想到的是做这样的事情。这样可以任意嵌套对象。不过,我还是不建议这样做。你真的不应该做这样的事情。“如果不使用提供的两种技术,我如何做这件事?”你为什么任意拒绝它们?有趣的,通用的方法。不过,似乎未使用变量结果。
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'));
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