Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

347
Vistas
¿Advertencias de usar el operador coalescente nulo (??) para verificar la existencia de una clave en un objeto?

Con el operador coalescente nulo ( ?? ), uno se siente tentado a usarlo para especificar valores predeterminados para claves de objetos inexistentes, como se sugiere en una respuesta aquí , por ejemplo:

 let a = foo.bar ?? 'default';

Sin embargo, sus alternativas en este caso (principalmente in y hasOwnProperty ) tienen sus advertencias y riesgos. Llamar <key> in <object> coincide con las claves en la cadena de prototipos de un objeto, como se explica aquí . Llamar <object>.hasOwnProperty(<key>) no funcionará, por ejemplo, si hasOwnProperty del objeto está sombreado, como se explica aquí . Seguramente, ?? tiene sus propias trampas a tener en cuenta.

¿Cuáles son las trampas con ?? en comparación con los otros métodos para verificar la existencia de una clave en cualquier objeto?


En otras palabras, son los riesgos de hacer lo siguiente:

 let a = foo.bar ?? 'default';

más cerca de esto

 let a = 'bar' in foo ? foo.bar : 'default';

O esto

 let a = foo.hasOwnProperty('bar') ? foo.bar : 'default';

O esto

 let a = Object.prototype.hasOwnProperty.call(foo, 'bar') ? foo.bar : 'default';

¿O son diferentes de cualquiera?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Los riesgos de los que está hablando son irrelevantes cuando sabe qué tipo de objeto esperar, en su caso particular, uno con una propiedad de bar . No hay Object.prototype.bar .

Los "riesgos" de usar ?? después de un acceso a la propiedad son exactamente los mismos que los riesgos de hacer el acceso a la propiedad. Su declaración let a = foo.bar ?? 'default'; es equivalente a

 let a = foo.bar == null ? 'default' : foo.bar;

o (sin acceder dos veces a la propiedad)

 let a = foo.bar; if (a == null) a = 'default';
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda