在嵌套数组中捕获未定义

时间:2015-11-28 07:06:23

标签: javascript

如果js数组为数组中的嵌套元素引发未定义,我想编写一个小辅助函数来返回0。我遇到的问题是,如果第一个索引已经失败并引发未定义的错误。嵌套索引不会在第二个索引失败!但它没有到达那里。如何在这里捕获所有错误最好?

function helper_check(arr){
  if (typeof(arr) == 'undefined') {
    return 0
 }

var some_var = helper_check(some_arr[0][1]) // so here some_arr[0] already fails and raises an error but i want to catch all errors witht he helper function

2 个答案:

答案 0 :(得分:1)

我认为你正在尝试做这样的事情。这里如果arr是一个空数组,那么它将在第二个if上失败。如果arr由于某种原因不是数组,它将在第一个if上失败。

function get_val(arr, x, y){
   if (!arr || !Array.isArray(arr)) {
     return 0;
   }

   if (arr[x] === undefined || arr[x][y] === undefined) {
    return 0;
   }

   return arr[x][y];
}

var some_var = get_val(some_arr, 0, 1)

如果你想保留旧的方法,你必须抓住错误。

function helper_check(arr){
  if (typeof(arr) == 'undefined') {
    return 0
 }

var some_var = 0;
try {
    some_var = helper_check(some_arr[0][1]);
}
catch(err) {//nothing to do here}

另一个不太优雅的选择

function helper_check(arr){
  try {
     var val = eval(arr);
     if (typeof(val) == 'undefined') {
        return 0;
     }
     return val;
  catch(err) {
     return 0;
  }
 }

some_var = helper_check('some_arr[0][1]');

答案 1 :(得分:0)

这是一个较旧的问题,但我在遇到类似问题时遇到了它,我在这里发布我的答案,以防它可以帮助其他人。

typeof(arr) == 'undefined'

这种方法实际上并没有在我的代码中捕获 [arr] 的未定义状态。我还尝试了 try/catch 方法 https://www.w3schools.com/js/js_errors.asp,结果类似。

对我有用的解决方案出奇地简单。只需测试 [arr] 的长度属性。

if (arr.length < 1)

根据您是否想要更明确,沿着这条思路还有多种其他选择。