Hola, les saluda Miguel y esta vez les traigo este artículo sobre el operador de JavaScript que probablemente no esté utilizando.
Si realiza una búsqueda en Google del término javascript operators
y haga clic en el primer resultado. Este místico no se verá por ningún lado. Al menos en septiembre de 2020, debe hacer clic en el cuarto resultado y luego haga una búsqueda en la página, de lo contrario, es muy fácil pasarlo por alto ya que no está incluido en ninguna de las bonitas tablas.
Índice
¡Basta de secretos!
Estoy hablando del Nullish Coalescing Operator
– ??
, es un operador lógico binario, lo mismo que ||
(OR lógico) y &&
(AND lógico) excepto que no hace coerción de tipo, en la práctica es similar a ||
y la sintaxis es la siguiente:
leftExp ?? rightExp
La expresión volverá rightExp
si leftExp
es igual a null
o undefined
, No truthy
o falsy
conversión que tiene lugar con consecuencias imprevistas, como 0
fallando nuestra verificación de número como está falsy
Parece que podemos reemplazar ||
con ??
y llamarlo un día entonces
No, esta es la razón
En primer lugar, este operador es bastante nuevo, Chrome solo lo admite desde la versión 80, que salió recién en febrero de 2020, y requeriría Node v14 (abril de 2020) en el lado del servidor de JavaScript.
En segundo lugar, anidar una expresión con ??
seguirá haciendo conversión de tipos, un gran ejemplo es una declaración if
:
if(0 ?? -1) { console.log("a number!") }
El registro nunca se ejecutará, obtendremos 0
de la expresión, pero en el contexto booleano de la if
todavía será considerado falsy
.
Por último, al encadenarlo con otros operadores lógicos, su valor de retorno seguirá estando sujeto a la conversión de tipos, lo que hace que sea más difícil procesar mentalmente lo que realmente está sucediendo. También requiere un conjunto adicional de paréntesis:
let a = true && (0 ?? false); // 0 let b = (0 ?? "bar") || "foo"; // "foo" let c = null ?? "bar" ?? "foo"; // "bar" let d = (0 ?? "foo") && "bar"; // 0
Aunque no todo es malo
Puede acortar las comprobaciones de los casos extremos en las operaciones de asignación con él muy bien, sin necesidad de comprobar explícitamente null
y undefined
que debe hacerse en el caso del OR lógico.
let a = 0; let b = a ?? -1; let c = 0; let d = c !== null && c !== undefined ? c : -1;
Mirando el ejemplo anterior, el encadenamiento con el OR lógico no tiene sentido, reemplazándolo con ??
aunque hace mucho.
let b = 0 ?? "bar" ?? "foo"; // 0
Sin embargo, el AND no se puede guardar.
¿Debo anular la fusión?
Yo personalmente lo haré, si el proyecto lo permite, pero solo cuando realice comprobaciones de asignación, ya que las expresiones son mucho más agradables a la vista que las normales. null
o undefiend
controles y más rápido de procesar mentalmente.
Encadenarse con otros operadores lógicos genera una tensión mental, ya que ya no hay solo truthy
y falsly
controles involucrados, pero adicionales null/undefined
los que luego se convierten en truthy/falsy
. Deben evitarse para mantener el código limpio y coherente.
Espero que hayas disfrutado del artículo. Gracias por leer.
Añadir comentario