Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

349
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda