我有一个对象(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}`])