# Operador Bang Bang (Valores Falsy/Truthy)

Javascript es capaz de evaluar variables como si fueran booleanos en contextos donde son requeridos.

What

Lo siento, esa descripción es muy técnica 😅. Comencemos con un ejemplo para entender mejor:

const nombre = 'Fer';

if (nombre) { // 'nombre' se considera 'true'
  console.log('La condición se cumplió');
}

Esto es posible gracias a los valores "falsy" y "truthy", es decir, valores que en ciertos casos se pueden considerar como verdadero o falso. Para saber cuál es cuál, es más fácil memorizar aquellos que al final del día son falsos. Así, cualquier otro valor que no se encuentre en esa lista podemos asegurar que es verdadero.

Falsy Truthy
0 []
"" (string vacío) {}
false Cualquier otro que no sea falsy
null
undefined
NaN

Posiblemente te estés preguntando ¿por qué el arreglo y el objeto vacío no se consideran falsos?. Esto se debe a que lo que JS evalúa en ellos es su referencia, en lugar de su contenido. Y estas referencias se generan automáticamente en la declaración, por lo que siempre serán verdaderos.

WARNING

Ten mucho cuidado al momento de condicionar usando arreglos y objetos. Para su uso correcto, evalúa explícitamente su contenido. Por ejemplo:

const arregloVacio = [];
if (arregloVacio.length) {}

const objetoVacio = {};
if (Object.keys(objectoVacio).length) {}

Pero si tú por alguna razón realmente necesitas convertir el valor de una variable a booleano, te recomiendo usar alguna de las siguientes dos opciones:

  1. Función Boolean
const nombre = 'Fer';
const booleano = Boolean(name); // 'Fer' -> true
  1. Operador Bang Bang
const nombre = 'Fer';
const booleano = !!name; // 'Fer' -> true

TIP

El operador Bang Bang realmente es el uso del operador NOT dos veces, ya que la primera vez obtenemos el valor booleano contrario y la segunda nos regresa al original.

const name = 'Fer';

// Primera negación
!name // 'Fer' -> false

// Segunda negación
!!name // 'Fer' -> false -> true

¿Cuál es mejor? Ninguna. Usa la que más te guste 😉.

Bueno, esto es todo por hoy. Nos vemos en la próxima.

Happy coding! 🥸