Operador de Fusión de Nulos ‘??’
Una incorporación relativamente nueva en JavaScript es el operador de fusión de nulos, representado por dos signos de interrogación juntos: ??.
Este operador se introdujo para manejar de manera más específica los valores nulos y undefined, proporcionando una forma concisa de asignar valores predeterminados cuando una expresión es nula o no está definida.
Funcionamiento del Operador ??
El operador ?? devuelve el primer valor que no sea nulo ni indefinido de entre dos operandos. Si el primer operando no es nulo ni indefinido, se devuelve ese valor. De lo contrario, se devuelve el segundo operando.
En términos prácticos, esto significa que podemos establecer fácilmente un valor predeterminado cuando no estamos seguros de si una variable tiene un valor válido o no:
let usuario;
alert(usuario ?? "Anónimo"); // Anónimo (usuario es undefined)
En este ejemplo, si usuario
no está definido, se mostrará «Anónimo». Si usuario
tiene algún valor asignado, se mostrará ese valor.
También es posible encadenar múltiples operadores ?? para seleccionar el primer valor que no sea nulo o indefinido de una lista de variables:
let primerNombre = null;
let apellido = null;
let apodo = "SuperProgramador";
alert(primerNombre ?? apellido ?? apodo ?? "Anónimo"); // SuperProgramador
Aquí, el operador ?? selecciona el primer valor que no sea nulo o indefinido, mostrando «SuperProgramador» porque es el primer valor definido de la lista.
Comparación con el Operador ||
Aunque el operador || se puede utilizar de manera similar para asignar valores predeterminados, hay una diferencia crucial en cómo manejan los valores considerados «falsos».
El operador || considera false, 0, una cadena vacía «», null y undefined como valores «falsos». Si cualquiera de estos valores es el primer operando, el segundo operando se devuelve como resultado:
let altura = 0;
alert(altura || 100); // 100
alert(altura ?? 100); // 0
En este ejemplo, altura || 100 devuelve 100 porque altura (0) se considera «falso». En cambio, altura ?? 100 devuelve 0 porque altura no es null ni undefined.
Precedencia y Uso
El operador ?? tiene la misma precedencia que el operador || en JavaScript, lo que significa que se evalúa antes que la mayoría de las operaciones aritméticas y de asignación, pero después de otros operadores como + y *.
Es importante utilizar paréntesis para asegurar que las expresiones se evalúen correctamente cuando se combinan con otros operadores:
let altura = null;
let anchura = null;
// Es crucial usar paréntesis aquí
let área = (altura ?? 100) * (anchura ?? 50);
alert(área); // 5000
Si omitimos los paréntesis en la expresión anterior, JavaScript interpretaría incorrectamente el orden de las operaciones debido a la precedencia de los operadores.
Limitaciones y Consideraciones
JavaScript prohíbe el uso de ?? junto con los operadores && y || sin el uso explícito de paréntesis para evitar ambigüedades y errores sintácticos:
let x = 1 && 2 ?? 3; // Error de sintaxis
let x = (1 && 2) ?? 3; // Funciona correctamente
alert(x); // 2
Conclusión
El operador de fusión de nulos ?? proporciona una manera clara y concisa de asignar valores predeterminados en JavaScript, especialmente útil cuando se trabaja con valores potencialmente nulos o indefinidos. Su introducción en el lenguaje ha mejorado la legibilidad y la precisión en la asignación de valores por defecto en expresiones condicionales.