JavaScript, al ser uno de los lenguajes de programación más populares, proporciona a los desarrolladores una variedad de operadores para manejar diversas operaciones lógicas. Entre estos, los operadores lógico OR (||) y coalescente nulo (??) son herramientas fundamentales para gestionar valores predeterminados y manejar valores nulos. Este artículo profundizará en las diferencias entre estos dos operadores, sus casos de uso y ejemplos prácticos y complejos para ilustrar su uso.
El operador lógico OR (||) en JavaScript se usa ampliamente para devolver el primer valor verdadero entre sus operandos o el último valor si ninguno es verdadero. Se utiliza principalmente para configurar valores predeterminados.
result = operand1 || operand2;
El || el operador evalúa de izquierda a derecha y devuelve el primer operando si es verdadero; de lo contrario, evalúa y devuelve el segundo operando.
let userInput = ''; let defaultText = 'Hello, World!'; let message = userInput || defaultText; console.log(message); // Output: 'Hello, World!'
En este ejemplo, userInput es una cadena vacía (falsa), por lo que se devuelve defaultText.
let firstName = null; let lastName = 'Doe'; let name = firstName || lastName || 'Anonymous'; console.log(name); // Output: 'Doe'
Aquí, el nombre es nulo (falso), por lo que el apellido se devuelve como verdadero.
La principal limitación del || operador es que trata varios valores como falsos, como 0, NaN, '', falso, nulo e indefinido. Esto puede generar resultados inesperados cuando se pretende que estos valores sean válidos.
El operador coalescente nulo (??) es una adición más reciente a JavaScript, introducida en ES2020. Está diseñado para manejar casos en los que null o indefinido están explícitamente destinados a ser los únicos valores nulos considerados.
result = operand1 ?? operand2;
El ?? El operador devuelve el operando de la derecha cuando el operando de la izquierda es nulo o no está definido. De lo contrario, devuelve el operando de la izquierda.
let userInput = ''; let defaultText = 'Hello, World!'; let message = userInput ?? defaultText; console.log(message); // Output: ''
En este ejemplo, userInput es una cadena vacía, que no es nula ni está indefinida, por lo que se devuelve.
let firstName = null; let lastName = 'Doe'; let name = firstName ?? lastName ?? 'Anonymous'; console.log(name); // Output: 'Doe'
Aquí, nombre es nulo, por lo que se devuelve apellido ya que no es nulo ni está indefinido.
let value1 = 0; let value2 = ''; let resultOR = value1 || 'default'; let resultNullish = value1 ?? 'default'; console.log(resultOR); // Output: 'default' console.log(resultNullish); // Output: 0
En este ejemplo, 0 se considera falso según || operador pero es un valor válido para ?? operador.
let userInput = null; let fallbackText = 'Default Text'; let message = (userInput ?? fallbackText) || 'Fallback Message'; console.log(message); // Output: 'Default Text'
Aquí, userInput es nulo, por lo que ?? usa fallbackText. operador. Luego el resultado es verificado por || operador, pero como fallbackText es verdadero, se devuelve.
Considere un escenario en el que necesite establecer valores predeterminados para las propiedades de los objetos anidados.
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'
En este ejemplo, userSettings.theme.color es una cadena vacía, por lo que se utiliza defaultSettings.theme.color. userSettings.theme.font es nulo, por lo que se utiliza defaultSettings.theme.font.
Al tratar con parámetros de funciones, es posible que desees proporcionar valores predeterminados para los argumentos que faltan.
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!'
En este ejemplo, el parámetro de nombre utiliza la propiedad ?? operador para establecer un valor predeterminado de 'Invitado' si el nombre es nulo o no está definido. El parámetro de saludo utiliza el || operador para establecer un valor predeterminado de 'Hola' si el saludo tiene un valor falso que no sea nulo o indefinido.
El encadenamiento opcional (?.) se puede combinar con || y ?? para manejar propiedades de objetos profundamente anidados de forma segura.
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'
En este ejemplo, el encadenamiento opcional garantiza que si alguna parte de la ruta de la propiedad no existe, devuelva indefinido, lo que evita errores. El || y ?? Los operadores luego proporcionan los valores predeterminados apropiados.
Uso || para incumplimiento generalizado:
Usar ?? para comprobaciones nulas precisas:
Combinando ambos:
¿Qué hace el operador lógico OR (||)?
El operador lógico OR (||) devuelve el primer valor verdadero entre sus operandos o el último operando si ninguno es verdadero.
¿Cuándo debo utilizar el operador coalescente nulo (??)?
Utilice el operador Coalescente nulo (??) cuando necesite manejar valores nulos o indefinidos específicamente sin tratar otros valores falsos como 0 o cadenas vacías como nulos.
¿Puedo usar ambos operadores juntos?
Sí, puedes usar ambos || y ?? juntos para manejar diferentes tipos de valores y garantizar que la lógica de su código cubra varios casos de manera efectiva.
¿Cómo || manejar cadenas vacías?
El || El operador trata las cadenas vacías como falsas, por lo que devolverá el siguiente operando si el primero es una cadena vacía.
¿El operador coalescente nulo (??) es compatible con todos los navegadores?
El ?? El operador es compatible con navegadores y entornos modernos que admiten ES2020. Para entornos más antiguos, es posible que necesites utilizar un transpilador como Babel.
¿Cuáles son las diferencias entre || y ?? operadores?
La principal diferencia es que || considera varios valores como falsos (p. ej., 0, '', falso), mientras que ?? solo trata nulos e indefinidos como valores nulos.
Comprender las diferencias entre los operadores lógico OR (||) y coalescente nulo (??) en JavaScript es crucial para escribir código sólido y libre de errores. El || El operador es excelente para escenarios de incumplimiento amplios, mientras que ?? es perfecto para manejar valores nulos con precisión. Al utilizar estos operadores de manera adecuada, puede asegurarse de que su código maneje varios estados de datos de manera efectiva, brindando una experiencia de usuario perfecta.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3