es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Asignación con encadenamiento opcional

ES16+ ofrece una forma abreviada obj.someMethod?.() para llamar a someMethod si existe en el objeto que llama.

Siendo consentido con este azúcar de codificación, también me gustaría asignar un valor a una propiedad si existe, algo como obj?.someProp = 42 (lo cual lleva a una asignación inválida en el lado izquierdo).

Me gustaría hacerlo con cualquier objeto (principalmente conjuntos de elementos HTMLElement). ¿Alguna idea de cómo acortar esto?

if(obj?.hasOwnProperty("someProp")) obj.someProp = 42

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una posible solución para acortar la asignación a una propiedad si existe en un objeto es utilizar una declaración condicional con el método hasOwnProperty(). El método hasOwnProperty() devuelve un valor booleano que indica si el objeto tiene una propiedad con el nombre especificado. Esto se puede utilizar para verificar si la propiedad existe antes de asignarle un valor.

    Aquí tienes un ejemplo de cómo utilizar este enfoque con la sintaxis abreviada:

    obj?.hasOwnProperty("someProp") && (obj.someProp = 42);
    

    En este código, el operador ?. se asegura de que el método hasOwnProperty() se llame solo si el objeto existe. Si la propiedad existe, se ejecuta la segunda parte de la declaración condicional (obj.someProp = 42), que asigna el valor 42 a la propiedad.

    Ten en cuenta que este enfoque asume que la propiedad es escribible (no de solo lectura) y no es una propiedad no configurabla. Además, este código puede no funcionar en navegadores más antiguos que no admiten la sintaxis ?. o el método hasOwnProperty().

Comments are closed.