Tengo un objeto (oUsed) que contiene campos "bloqueados" de una cuadrícula. Si un campo está bloqueado, es "verdadero". Si no está bloqueado, es indefinido.
Lo que puede suceder ahora es que una línea completa (valor de la coordenada x) no esté bloqueada. Entonces, el siguiente código fallará, ya que verifica el atributo de un objeto indefinido.
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; } }Hacerlo en dos pasos funciona, pero no es muy bonito.
for (let iX=1;iX <= 3; iX++) { if (oUsed[`x${iX}`]) { if (oUsed[`x${iX}`][`x${iY}`]) { break; } } }¿Cuál es la mejor práctica para este tipo de verificación?
Use Object.hasOwnProperty u Object.hasOwn
if (oUsed.hasOwnProperty(`x${iX}`) && oUsed[`x${iX}`][`x${iY}`])o
usar así
if (oUsed[`x${iX}`] && oUsed[`x${iX}`][`x${iY}`]) {o si su navegador de destino admite el encadenamiento opcional
if (oUsed[`x${iX}`]?.[`x${iY}`])