DEV Community

Cover image for Diferença entre operadores ?, ?? e || no JavaScript / TypeScript
Rafael Thayto
Rafael Thayto

Posted on • Edited on

12

Diferença entre operadores ?, ?? e || no JavaScript / TypeScript

Contexto

Acredito que todo dev já ficou em dúvida sobre as diferenças entre alguns operadores do JavaScript/TypeScript. Por isso fiz esse post simples e rápido sobre as diferenças entre os operadores ?, ?? e ||. Confira logo abaixo

? - Optional Chaining

? -> Optional Chaining Operator.
Permite a leitura do valor de uma propriedade localizada internamente em uma cadeia de objetos conectados, sem que a validação de cada referência da cadeia seja expressivamente realizada.

O operador ?. funciona de maneira similar ao operador . de encadeamento, exceto que, ao invés de causar um erro se a referência é nullish (null ou undefined), a expressão sofre um "curto-circuito" e retorna com um valor de undefined. Quando utilizado com uma chamada de função, retorna undefined se a função executada não existir.

Isso resulta em expressões mais curtas e simples ao acessar propriedades encadeadas quando a possibilidade de uma referência ser inexistente. Isso também pode auxiliar ao explorar o conteúdo de um objeto quando não existe garantia da existência de determinadas propriedades obrigatórias.

Exemplo

const user = {
  id: 13,
  name: "Thayto"
};

console.log(user?.name); // John
console.log(user?.fullName); // undefined, aplicação não vai quebrar.
console.log(user.fullName); // TypeError: Cannot read property ‘fullName’ of undefined, aplicação quebra.
Enter fullscreen mode Exit fullscreen mode

?? - Nullish Coalesing

?? -> Nullish Coalescing Operator.
É um operador lógico que retorna o seu operando do lado direito quando o seu operador do lado esquerdo é null ou undefined. Caso contrário, ele retorna o seu operando do lado esquerdo.

Exemplo

console.log(13 ?? "não encontrado") // 13
console.log(0  ?? "não encontrado") // 0

console.log("Dri"  ?? "não encontrado") // "Dri"
console.log(""     ?? "não encontrado") // ""

console.log(true  ?? "não encontrado") // true
console.log(false ?? "não encontrado") // false

console.log(undefined ?? "não encontrado") // "não encontrado"
console.log(null      ?? "não encontrado") // "não encontrado"
Enter fullscreen mode Exit fullscreen mode

|| - Logical OR

|| é o Logical OR Operator
A expressão Logical OR é avaliada da esquerda para a direita, é testada para possível avaliação de "curto-circuito" usando a seguinte regra:

(alguma truthy expression) || expr é avaliado em curto-circuito para a expressão verdadeira.

Curto-circuito significa que a parte expr acima não é avaliada, portanto, quaisquer efeitos colaterais de fazê-lo não têm efeito (por exemplo, se expr é uma chamada de função, a chamada nunca ocorre). Isso acontece porque o valor do operador já é determinado após a avaliação do primeiro operando.

Exemplo

console.log(13 || "não encontrado") // 13
console.log(0  || "não encontrado") // "não encontrado"

console.log("Dri"  || "não encontrado") // "Dri"
console.log(""     || "não encontrado") // "não encontrado"

console.log(true  || "não encontrado") // true
console.log(false || "não encontrado") // "não encontrado"

console.log(undefined || "não encontrado") // "não encontrado"
console.log(null      || "não encontrado") // "não encontrado"
Enter fullscreen mode Exit fullscreen mode

Originalmente postado em https://thayto.com dia 31 de outubro de 2022.

AWS GenAI LIVE image

Real challenges. Real solutions. Real talk.

From technical discussions to philosophical debates, AWS and AWS Partners examine the impact and evolution of gen AI.

Learn more

Top comments (0)

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay