Introducción

Este post es una continuación de JS: Operadores de variables I en el que introdujimos a los Operadores de Variables y trabajamos con los Operadores Matemáticos, de Asignación y los de Incremento/Decremento. 
En esta ocasión, vamos a estar trabajando con los Operadores Lógicos.

Operadores Lógicos

Tabla de Operadores Lógicos

 Los Operadores Lógicos reciben su nombre de la Lógica Matemática. El estudio de la misma implica el análisis de estructuras lógicas para conocer su valor de verdad. 

Los Operadores Lógicos permiten generar evaluaciones, conocidas como condiciones, para determinar si una estructura es verdadera o falsa.

Condiciones

Las distintas evaluaciones que se pueden hacer cuando trabajamos con los operadores lógicos son conocidas como condiciones.

Una condición puede ser pensada como una pregunta cuya respuesta solo puede ser sí o no. Por ejemplo, podríamos preguntar: el dato almacenado en la variable a ¿es igual al dato almacenado en la variable b?. La respuesta a esa pregunta solo puede ser sí o no. La pregunta, por tanto, es una condición.

Tipos de Condiciones

Las condiciones pueden ser dividas en dos grupos: Las Condiciones Simples y Las Condiciones Compuestas. A las Condiciones Simples, además, podemos dividirlas en aquellas que realizan una operación y las que analizan la existencia (o no) de un dato dentro de un espacio de memoria.

  • Condiciones Simples
    • Realizan una operación
      Ejemplos
      • ¿Es a mayor que b? → a(10) > b(5) → No → Devuelve false
      • ¿Es a menor o igual que b? → a(5) <= b(5) → Si → Devuelve true
    • Analizan la existencia de un dato dentro de un espacio de memoria
      Ejemplos
      • ¿Existe un dato en a? → a(undefined) → No → Devuelve false
      • ¿Existe un dato en a? → a(5) → Si → Devuelve true
      Con este tipo de condicionales debemos tener en cuenta a las denominadas expresiones falsy. Un falsy es un valor que se evalúa como si fuera false.
      La siguiente es una lista de todos los valores que, al preguntar por la existencia de un dato, devuelven false
      • false
      • 0
      • -0
      • ""
      • null
      • undefined
      • NaN
  • Condiciones Compuestas - Este tipo de condiciones permite hacer más de una pregunta y obtener el resultado según el operador utilizado.
    Ejemplos
    • ¿Existe un dato en a?, y ¿es el dato en a mayor que 2? → a(undefined) && a > 2 → No existe dato en a → AND pide que todas las condiciones sean true → Devuelve false
    • ¿Existe un dato en a?, y ¿es el dato en a mayor que 2? → a(3) && a > 2 → Existe dato en a y ese dato es mayor que 2 → AND pide que todas las condiciones sean true → Devuelve true
    • ¿Es a mayor que b?, y ¿es el dato en a mayor que 2? → a(2) > b(1) && a > 2 → a es mayor que b, pero no es mayor que 2 → AND pide todas las condiciones sean true → Devuelve false
    • ¿Es a mayor que b?, o ¿es el dato en a mayor que 2? → a(2) > b(3) && a > 1 → a es menor que b, pero es mayor que 1 → || pide que una de las condiciones sean true → Devuelve true

Al memento de platear nuestras condiciones debemos recordar que existe el operador de negación cuyo trabajo es invertir el valor devuelto por la condición. Es decir, si una condición devuelve true el resultado final será false.

Ejemplos
  • ¿Existe un dato en a?. Quiero la respuesta contraria → !a(undefined) → !(No) → Devuelve true
  • ¿Existe un dato en a?. Quiero la respuesta contraria → !a(5) → !(Si) → Devuelve false
  • ¿Existe un dato en a?, y ¿es el dato en a mayor que 2?. Quiero el resultado contrario → !(a(undefined) && a > 2) → !(No existe dato en a) → AND pide que todas las condiciones sean true → !(true) → Devuelve false
  • ¿Existe un dato en a?, y ¿es el dato en a mayor que 2?. Quiero el resultado contrario → !(a(3) && a > 2) → Existe dato en a y ese dato es mayor que 2 → AND pide que todas las condiciones sean true → !(true) ⇾ Devuelve true

Casteo implícito y condiciones

En el post JS: Operadores de Variables I, comentamos que NO SE PUEDE OPERAR SOBRE VARIABLES DE DISTINTO TIPO y que, JavaScript, evita este problema convirtiendo, sin que nosotros hagamos nada, un tipo de dato en otro según qué operaciones estamos queriendo realizar. El trabajo con los Operadores Lógicos también tiene esta particularidad.

En la tabla que contiene a los distintos operadores nos encontramos con dos formas de preguntar si un dato es igual a otro y dos formas de preguntar si un dato es distinto a otro. Los operadores de igualdad/desigual (==/!=) son descritos como operadores que solo evalúan en valor de una variable y no su tipo de dato (tipo de dato === representación mental de qué tipo de acción se puede realizar con un valor). En realidad, estos operadores están atados al casteo implícito, por lo que, si queremos comparar distintos tipos de datos, JavaScript realizará la conversión a uno de esos datos y luego hará la comparación.

Por otra parte, los operadores de igualdad/desigualdad estricta (===/!==) plantean que se evalúa tipo de dato y valor. Lo que en realidad sucede es que, al usar estos operadores, le estamos pidiendo a JS que no haga el caseto implícito.

Tabla de Casteo Implícito según operador

Ejemplos