开发者问题收集

如何检查未定义的二维数组值而不会出现“无法检查未定义的属性”错误

2019-11-19
128

如您所见,在创建长度为 [20][20] 的二维数组后,有一个 if 语句试图检查数组值是否为“未定义”;然而,不知何故,我一直收到错误提示“Uncaught TypeError: Cannot read property '0' of undefined”。 那么,有没有办法避免出错并检查是否有值呢?

//If there is a more efficiency way to build these loops, then I'll be glad to see it

let map = [];
let savedPoints = [];
let value = 0;
let something = 0; // testing values
let somethingelse = 0; 

for(let i = 0 ; i < 20; i++) {
  map[i] = [];
  savedPoints[i] = [];
  let pointx = i + something;
  for(let j = 0; j < 20; j++) {
    let pointy = j + somethingelse;
    savedPoints[i][j] = {pointx, pointy};
    map[i][j] = value;
  }
}

let x = 110;
let y = 0;
//this will give error
if(typeof map[x+1][y] !== 'undefined') { 
  //do something... 
}
3个回答

你可以试试这个:

if (typeof map[x+1] !== 'undefined' && typeof map[x+1][y] !== 'undefined') {
 //code here
}
Jon
2019-11-19

您可以使用

if(map[x+1]) { 
  //do something... 
}
检查第一个数组,并使用
if(map[x+1]) {
  if(map[x+1][y]) { 
    //do something... 
  }
}
检查第二个数组
dida nurdiansyah
2019-11-19
if (map[x+1] && map[x+1][y]) { ... }

您不需要 typeof 映射,它只能包含数组。如果 map[x+1] 等于 false,则不会检查 map[x+1][y] 。看起来不太好。等待新标准中的链式检查。

Crutch Master
2019-11-19