JavaScript, sendo uma das linguagens de programação mais populares, fornece aos desenvolvedores uma variedade de operadores para lidar com várias operações lógicas. Entre eles, os operadores Logical OR (||) e Nullish Coalescing (??) são ferramentas fundamentais para gerenciar valores padrão e lidar com valores nulos. Este artigo se aprofundará nas diferenças entre esses dois operadores, seus casos de uso e exemplos práticos e complexos para ilustrar seu uso.
O operador lógico OR (||) em JavaScript é amplamente usado para retornar o primeiro valor verdadeiro entre seus operandos ou o último valor se nenhum for verdadeiro. É usado principalmente para definir valores padrão.
result = operand1 || operand2;
O || o operador avalia da esquerda para a direita, retornando o primeiro operando se for verdadeiro; caso contrário, avalia e retorna o segundo operando.
let userInput = ''; let defaultText = 'Hello, World!'; let message = userInput || defaultText; console.log(message); // Output: 'Hello, World!'
Neste exemplo, userInput é uma string vazia (falsy), então defaultText é retornado.
let firstName = null; let lastName = 'Doe'; let name = firstName || lastName || 'Anonymous'; console.log(name); // Output: 'Doe'
Aqui, firstName é nulo (falso), então lastName é retornado como verdadeiro.
A principal limitação do || operador é que ele trata vários valores como falsos, como 0, NaN, '', falso, nulo e indefinido. Isso pode levar a resultados inesperados quando esses valores são considerados válidos.
O operador Nullish Coalescing (??) é uma adição mais recente ao JavaScript, introduzida no ES2020. Ele foi projetado para lidar com casos em que nulo ou indefinido são explicitamente considerados os únicos valores nulos considerados.
result = operand1 ?? operand2;
O ?? O operador retorna o operando à direita quando o operando à esquerda é nulo ou indefinido. Caso contrário, ele retorna o operando esquerdo.
let userInput = ''; let defaultText = 'Hello, World!'; let message = userInput ?? defaultText; console.log(message); // Output: ''
Neste exemplo, userInput é uma string vazia, que não é nula ou indefinida, portanto é retornada.
let firstName = null; let lastName = 'Doe'; let name = firstName ?? lastName ?? 'Anonymous'; console.log(name); // Output: 'Doe'
Aqui, firstName é nulo, então lastName é retornado porque não é nulo nem indefinido.
let value1 = 0; let value2 = ''; let resultOR = value1 || 'default'; let resultNullish = value1 ?? 'default'; console.log(resultOR); // Output: 'default' console.log(resultNullish); // Output: 0
Neste exemplo, 0 é considerado falso pelo || operador, mas é um valor válido para o ?? operador.
let userInput = null; let fallbackText = 'Default Text'; let message = (userInput ?? fallbackText) || 'Fallback Message'; console.log(message); // Output: 'Default Text'
Aqui, userInput é nulo, então fallbackText é usado pelo ?? operador. Em seguida, o resultado é verificado pelo || operador, mas como fallbackText é verdadeiro, ele é retornado.
Considere um cenário em que você precisa definir valores padrão para propriedades de objetos aninhados.
let userSettings = { theme: { color: '', font: null } }; let defaultSettings = { theme: { color: 'blue', font: 'Arial' } }; let themeColor = userSettings.theme.color || defaultSettings.theme.color; let themeFont = userSettings.theme.font ?? defaultSettings.theme.font; console.log(themeColor); // Output: 'blue' console.log(themeFont); // Output: 'Arial'
Neste exemplo, userSettings.theme.color é uma string vazia, então defaultSettings.theme.color é usado. userSettings.theme.font é nulo, então defaultSettings.theme.font é usado.
Ao lidar com parâmetros de função, você pode querer fornecer valores padrão para argumentos ausentes.
function greet(name, greeting) { name = name ?? 'Guest'; greeting = greeting || 'Hello'; console.log(`${greeting}, ${name}!`); } greet(); // Output: 'Hello, Guest!' greet('Alice'); // Output: 'Hello, Alice!' greet('Bob', 'Hi'); // Output: 'Hi, Bob!' greet(null, 'Hey'); // Output: 'Hey, Guest!'
Neste exemplo, o parâmetro name usa o ?? operador para definir um valor padrão de 'Convidado' se o nome for nulo ou indefinido. O parâmetro saudação usa o || operador para definir um valor padrão de 'Hello' se a saudação for qualquer valor falso diferente de nulo ou indefinido.
Encadeamento opcional (?.) pode ser combinado com || e ?? para lidar com propriedades de objetos profundamente aninhados com segurança.
let user = { profile: { name: 'John Doe' } }; let userName = user?.profile?.name || 'Anonymous'; let userEmail = user?.contact?.email ?? 'No Email Provided'; console.log(userName); // Output: 'John Doe' console.log(userEmail); // Output: 'No Email Provided'
Neste exemplo, o encadeamento opcional garante que se alguma parte do caminho da propriedade não existir, ele retornará indefinido, evitando erros. O || e ?? os operadores fornecem valores padrão apropriados.
Usar || para inadimplência ampla:
Usar ?? para verificações nulas precisas:
Combinando ambos:
O que o operador lógico OR (||) faz?
O operador lógico OR (||) retorna o primeiro valor verdadeiro entre seus operandos ou o último operando se nenhum for verdadeiro.
Quando devo usar o operador Nullish Coalescing (??)?
Use o operador Nullish Coalescing (??) quando precisar lidar com nulo ou indefinido especificamente, sem tratar outros valores falsos como 0 ou strings vazias como nulos.
Posso usar os dois operadores juntos?
Sim, você pode usar ambos || e ?? juntos para lidar com diferentes tipos de valores e garantir que sua lógica de código cubra vários casos de maneira eficaz.
Como é que || lidar com strings vazias?
O || O operador trata strings vazias como falsas, portanto retornará o próximo operando se o primeiro for uma string vazia.
O operador Nullish Coalescing (??) é compatível com todos os navegadores?
O ?? operador é compatível com navegadores e ambientes modernos que suportam ES2020. Para ambientes mais antigos, pode ser necessário usar um transpilador como o Babel.
Quais são as diferenças entre || e ?? operadores?
A principal diferença é que || considera vários valores como falsos (por exemplo, 0, '', falso), enquanto ?? trata apenas nulo e indefinido como valores nulos.
Compreender as diferenças entre os operadores Logical OR (||) e Nullish Coalescing (??) em JavaScript é crucial para escrever código robusto e livre de erros. O || operador é ótimo para cenários amplos de inadimplência, enquanto ?? é perfeito para lidar com valores nulos com precisão. Ao usar esses operadores de maneira adequada, você pode garantir que seu código lide com vários estados de dados de maneira eficaz, proporcionando uma experiência de usuário perfeita.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3