Puedo verificar si existe una propiedad así:
let myObject = {}; let exists = myObject.myProperty !== undefined;Pero, ¿cómo puedo verificar si la propiedad existe cuando myObject tampoco está definido, los siguientes errores:
// let myObject = {}; // do not set this let exists = myObject.myProperty !== undefined;Hay varias cosas en juego aquí.
Primero, para verificar si el objeto existe en el alcance actual, debe usar el operador typeof:
let objectExists = typeof myObject !== 'undefined'de esta manera, el intérprete no arrojará un error.
En segundo lugar, para verificar si el objeto tiene una propiedad específica, aún es mejor usar el antiguo operador in
let propertyExists = 'myProperty' in myObject Ambas expresiones devuelven un valor booleano, verdadero o falso.
Entonces, para una verificación segura, puede usar:
if(typeof myObject !== 'undefined' && myProperty in myObject) { // do your stuff } si intenta usar la forma más nueva de myObject?.myProperty aún arrojará un ReferenceError si no ha declarado myObject
y si usa myObject.hasOwnProperty(myProperty) podría obtener un resultado engañoso, si su objeto hereda de otro y la propiedad pertenece al antepasado
si myObject doesn't exist at all , use try/catch
let exists; try { exists = myObject.hasOwnProperty('myProperty'); }catch(err){ console.log(err.message) } si es null o undefined , use ?. (encadenamiento opcional) operador:
let exists = myObject?.hasOwnProperty('myProperty');Dado que es posible que la variable myObject no esté definida (según su pregunta), debe envolver su código con try/catch para que el flujo no se interrumpa:
let exists = false; try{ // try to access "a" property of myObject exists = myObject?.a; } catch{ // because myObject is not defined, the catch block is invoked console.log("myObject", "is not defined") } console.log({exists})