Operadores booleanos de ECMAScript

Los operadores booleanos son muy importantes, ya que permiten que el lenguaje de programación funcione correctamente.

Los operadores booleanos tienen tres tipos: NOT, AND y OR.

Operación ToBoolean

Antes de aprender varios operadores lógicos, permítenos entender la operación ToBoolean descrita en la norma ECMAScript-262 v5.

La operación abstracta ToBoolean convierte sus parámetros según las reglas de la tabla siguiente:

Tipo de parámetro Resultado
Indefinido false
Nulo false
Booleano El resultado es igual al parámetro de entrada (sin convertir)
Número Si el parámetro es +0, -0 o NaN, el resultado es false; de lo contrario, es true.
Cadena Si el parámetro es una cadena vacía, el resultado es false; de lo contrario, es true.
Objeto true

Operador lógico NOT

En ECMAScript, el operador NOT lógico es el mismo que en C y Java, y se representa con el signo de exclamación (!).

A diferencia de los operadores lógicos OR y AND,El operador NOT lógico siempre devuelve un valor booleano.

El comportamiento del operador NOT lógico es el siguiente:

  • Si el operando es un objeto, devuelve false
  • Si el operando es el número 0, devuelve true
  • Si el operando es cualquier número diferente de 0, devuelve false
  • Si el operando es null, devuelve true
  • Si el operando es NaN, devuelve true
  • Si el operando es undefined, se produce un error

Por lo general, este operador se utiliza para controlar bucles:

var bFound = false;
var i = 0;
while (!bFound) {
  if (aValue[i] == vSearchValues) {
    bFound = true;
  } else {
    i++;
  }
}

En este ejemplo, la variable booleana (bFound) se utiliza para registrar si la búsqueda fue exitosa. Cuando se encuentra el elemento de datos en cuestión, bFound se establece en true, !bFound es igual a false, lo que significa que se saldrá del bucle while.

Al evaluar el valor booleano de una variable ECMAScript, también se puede usar el operador NOT lógico. Para hacer esto, se necesitan dos operadores NOT en una sola línea de código. El primer NOT devuelve un valor booleano independientemente del tipo de operando. El segundo NOT niega ese valor booleano, proporcionando así el valor booleano real de la variable.

var bFalse = false;
var sRed = "red";
var iZero = 0;
var iThreeFourFive = 345;
var oObject = new Object;
document.write("El valor lógico de bFalse es " + (!!bFalse));
document.write("El valor lógico de sRed es " + (!!sRed));
document.write("El valor lógico de iZero es " + (!!iZero));
document.write("El valor lógico de iThreeFourFive es " + (!!iThreeFourFive));
document.write("El valor lógico de oObject es " + (!!oObject));

Resultado:

El valor lógico de bFalse es false
El valor lógico de sRed es true
El valor lógico de iZero es false
El valor lógico de iThreeFourFive es true
El valor lógico de oObject es true 

Operador lógico AND

En ECMAScript, el operador lógico AND se representa con dos yacimientos (&&):

Por ejemplo:

var bTrue = true;
var bFalse = false;
var bResult = bTrue && bFalse;

La tabla de verdad a continuación describe el comportamiento del operador lógico AND:

Operando 1 Operando 2 Resultado
true true true
true false false
false true false
false false false

Los operandos de la operación lógica AND pueden ser de cualquier tipo, no solo valores Booleanos.

Si algún operando no es un valor Booleano original, la operación lógica AND no necesariamente devuelve un valor Booleano:

  • Si un operando es un objeto y el otro es un valor Booleano, se devuelve el objeto.
  • Si ambos operandos son objetos, se devuelve el segundo objeto.
  • Si algún operando es null, se devuelve null.
  • Si algún operando es NaN, se devuelve NaN.
  • Si algún operando es undefined, se produce un error.

Al igual que la operación lógica AND en Java, la operación lógica AND en ECMAScript es una operación simple, es decir, si el primer operando determina el resultado, ya no se calculará el segundo operando. Para la operación lógica AND, si el primer operando es false, independientemente del valor del segundo operando, el resultado no puede ser true.

Considera el siguiente ejemplo:

var bTrue = true;
var bResult = (bTrue && bUnknown); // Se produce un error
alert(bResult); // Esta línea no se ejecutará

Este código generará un error durante la operación lógica AND, porque la variable bUnknown está sin definir. El valor de la variable bTrue es true, porque la operación lógica AND continuará calculando la variable bUnknown. Hacer esto generará un error, porque el valor de bUnknown es undefined y no se puede usar en la operación lógica AND.

Si se modifica este ejemplo, estableciendo el primer número en false, no ocurrirá ningún error:

var bFalse = false;
var bResult = (bFalse && bUnknown);
alert(bResult); // Mostrar "false"

En este código, el script mostrará el valor devuelto por la operación lógica AND, es decir, la cadena "false". Incluso si el valor de la variable bUnknown es undefined, no se calculará, porque el valor del primer operando es false.

Consejo:Al usar el operador lógico AND, debe recordar su característica de cálculo simplificado.

Operador lógico OR

El operador lógico OR en ECMAScript es el mismo que en Java, ambos se representan con dos barras verticales (||):

var bTrue = true;
var bFalse = false;
var bResult = bTrue || bFalse;

La tabla de valores verdaderos a continuación describe el comportamiento del operador lógico OR:

Operando 1 Operando 2 Resultado
true true true
true false true
false true true
false false false

Al igual que el operador lógico AND, si algún operando no es un valor Booleano, el operador lógico OR no necesariamente devuelve un valor Booleano:

  • Si un operando es un objeto y todos los valores a la izquierda del operando son false, se devuelve el objeto.
  • Si ambos operandos son objetos, se devuelve el primer objeto.
  • Si el último operando es null y todos los otros operandos son false, se devuelve null.
  • Si el último operando es NaN y todos los otros operandos son false, se devuelve NaN.
  • Si algún operando es undefined, se produce un error.

Al igual que el operador lógico AND, la operación lógica OR también es una operación sencilla. Para el operador lógico OR, si el primer valor de la operación es true, ya no se calculará el segundo valor.

Por ejemplo:

var bTrue = true;
var bResult = (bTrue || bUnknown);
alert(bResult);			//Salida "true"

Al igual que en el ejemplo anterior, la variable bUnknown está sin definir. Sin embargo, debido al valor true de la variable bTrue, bUnknown no se calculará, por lo que la salida es "true".

Si cambia bTrue a false, se producirá un error:

var bFalse = false;
var bResult = (bFalse || bUnknown);	//Se produce un error
alert(bResult);			//No se ejecutará esta línea