检查可能未定义的对象属性的最佳方法



我有一个对象(sed)包含"blocked"网格的字段。如果一个字段被阻塞,它是"true"。如果未被阻塞,则为未定义

现在可能发生的是,整条线(x坐标值)没有被阻塞。因此,下面的代码将失败,因为它检查未定义对象的属性。

let oUsed = {
"x1":{
"y2": true; 
"y3": true;
}
"x3":{
"y2": true;
}
}
let iY = 2;
for (let iX=1;iX <= 3; iX++) {
if (oUsed[`x${iX}`][`x${iY}`]) {
break;
}
}

分两步完成可以,但是不太美观。

for (let iX=1;iX <= 3; iX++) {
if (oUsed[`x${iX}`]) {
if (oUsed[`x${iX}`][`x${iY}`]) {
break;
}
}
}

这种检查的最佳做法是什么?

使用对象。hasOwnProperty或Object.hasOwn

if (oUsed.hasOwnProperty(`x${iX}`) && oUsed[`x${iX}`][`x${iY}`])

像这样使用

if (oUsed[`x${iX}`] && oUsed[`x${iX}`][`x${iY}`]) {

或者如果目标浏览器支持可选链接

if (oUsed[`x${iX}`]?.[`x${iY}`]) 

最新更新