Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

344
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!