我有一个对象(oUsed),其中包含网格的“阻止”字段。如果某个字段被阻止,则它是“true”。如果没有被阻止,则它是未定义的。
现在可能发生的是,整条线(x 坐标值)没有被阻挡。因此以下代码将失败,因为它检查 undefined object 的属性。
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;
}
}
}
这种检查的最佳实践是什么?
最佳答案
使用Object.hasOwnProperty或Object.hasOwn
if (oUsed.hasOwnProperty(`x${iX}`) && oUsed[`x${iX}`][`x${iY}`])
或
像这样使用
if (oUsed[`x${iX}`] && oUsed[`x${iX}`][`x${iY}`]) {
或者如果Optional Chaining由 your target browser 支持
if (oUsed[`x${iX}`]?.[`x${iY}`])
关于javascript - 检查可能 undefined object 属性的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72977824/