Operadores de comparación

Los operadores de comparación comparan los valores de dos operandos y evalúan si la sentencia que forman es true o false. En el siguiente ejemplo, se usa el operador de igualdad estricta (===) para comparar dos operandos: la expresión 2 + 2 y el valor 4. Como el resultado de la expresión y el valor numérico 4 son iguales, esta expresión se evalúa como true:

2 + 2 === 4
> true

Coerción y igualdad de tipos

Dos de los operadores de comparación más usados son == para la igualdad flexible y === para la igualdad estricta. == realiza una comparación imprecisa entre dos valores forzando a los operandos a que coincidan con los tipos de datos, si es posible. Por ejemplo, 2 == "2" muestra true, aunque la comparación se realice entre un valor numérico y un valor de cadena.

2 == 2
> true

2 == "2"
> true

Lo mismo sucede con !=, que muestra true solo si los operandos que se comparan no son iguales de forma no estricta.

2 != 3
> true

2 != "2"
> false

Las comparaciones estrictas con === o !== no realizan una coerción de tipo. Para que una comparación estricta evalúe a true, los valores que se comparan deben tener el mismo tipo de datos. Debido a esto, 2 == "2" muestra true, pero 2 === "2" muestra false:

2 === 3
> false

2 === "2"
> false

Para quitar cualquier ambigüedad que pueda resultar de la coerción automática, usa === siempre que sea posible.

Operador Descripción Uso Resultado
=== Estrictamente igual 2 === 2 verdadero
!== No es estrictamente igual 2 !== "2" verdadero
== Igual (o "aproximadamente igual") 2 == "2" verdadero
!= No igual 2 != "3" verdadero
> Mayor que 3 > 2 verdadero
>= Mayor o igual que 2 >= 2 verdadero
< Menor que 2 < 3 verdadero
<= Menor o igual que 2 <= 3 verdadero

Valores verdaderos y falsos

Todos los valores en JavaScript son true o false de forma implícita y se pueden forzar al valor booleano correspondiente, por ejemplo, con el comparador "igual de forma imprecisa". Un conjunto limitado de valores se convierte en false:

  • 0
  • null
  • undefined
  • NaN
  • Una cadena vacía ("")

Todos los demás valores se convierten a true, incluida cualquier cadena que contenga uno o más caracteres y todos los números distintos de cero. Por lo general, se denominan valores “verdaderos” y “falsos”.

"My string" == true
> true

100 == true
> true

0 == true
> false

Operadores lógicos

Usa los operadores lógicos Y (&&), O (||) y NO (!) para controlar el flujo de una secuencia de comandos en función de la evaluación de dos o más sentencias condicionales:


2 === 3 || 5 === 5;
> true

2 === 2 && 2 === "2"
> false

2 === 2 && !"My string."
> false

Una expresión lógica NOT (!) niega el valor verdadero o falso de un operando, y se evalúa como true si el operando se evalúa como false, y como false si el operando se evalúa como true:


true
> true

!true
> false

!false
> true

El uso del operador lógico NOT (!) antes de otro tipo de datos, como un número o una cadena, convierte ese valor en un booleano y revierte el valor verdadero o falso del resultado.

"string"
> "string"

!"string"
> false

0
> 0

!0
> true

Es una práctica común usar dos operadores NOT para forzar rápidamente los datos a su valor booleano coincidente:

!!"string"
> true

!!0
> false

Los operadores lógicos AND y OR no realizan ninguna coerción por sí solos. Muestran el valor de uno de los dos operandos que se evalúan, y el operando elegido se determina según esa evaluación.

El operador lógico AND (&&) muestra el primero de sus dos operandos solo si ese operando se evalúa como false y el segundo operando de lo contrario. En las comparaciones que se evalúan como valores booleanos, muestra true solo si los operandos a ambos lados del operador Y lógico se evalúan como true. Si cualquiera de los lados se evalúa como false, muestra false.

true && false
> false

false && true
> false

false && false
> false

true && true
> true

Cuando se usa && con dos operandos no booleanos, el primer operando se muestra sin cambios si se puede forzar a false. Si el primer operando se puede forzar a true, el segundo operando se muestra sin cambios:

false && "My string"
> false

null && "My string"
> null

"My string" && false
> false

"My string" && "My second string"
> "My second string"

2 === 2 && "My string"
> "My string"

El operador O lógico (||) muestra el primero de sus dos operandos solo si ese operando se evalúa como true y el segundo operando de lo contrario. En las comparaciones que se evalúan como valores booleanos, esto significa que muestra true si cualquiera de los operandos se evalúa como true y, si ninguno de los lados se evalúa como true, muestra false:

true || false
> true

false || true
> true

true || true
> true

false || false
> false

Cuando se usa || con dos operandos no booleanos, muestra el primer operando sin cambios si se puede forzar a true. Si el primer operando se puede forzar a false, el segundo operando se muestra sin cambios:

false || "My string"
> "My string"

null || "My string"
> "My string"

"My string" || false
> "My string"

"My string" || "My second string"
> "My string"

2 === 2 || "My string"
> true

Operador de incorporación nula

Presentado en ES2020, el “operador coalescente nulo” (??) muestra el primer operando solo si ese operando tiene cualquier valor que no sea null o undefined. De lo contrario, muestra el segundo operando.

null ?? "My string"
> "My string"

undefined ?? "My string"
> "My string"

true ?? "My string";
> true

?? es similar a un OR lógico, pero es más estricto en la forma en que se evalúa el primer operando. || muestra el segundo operando para cualquier expresión que se pueda forzar a false, incluidos undefined y null. ?? muestra el segundo operando solo cuando el primer operando es estrictamente igual a null o undefined, incluso si se puede forzar a false:

0 ?? "My string";
> 0

false ?? "My string";
> false

undefined ?? "My string";
> "My string"

Operadores de asignación lógica

Usa operadores de asignación para asignar el valor de un segundo operador a un primer operador. El ejemplo más común de esto es un solo signo igual (=), que se usa para asignar un valor a una variable declarada.

Usa operadores de asignación lógica para asignar condicionalmente un valor a una variable según el valor verdadero o falso de esa variable.

El operador de asignación lógica Y (&&=) evalúa el segundo operando y lo asigna al primero solo si este se evalúa como true; en efecto, "si el primer operando es verdadero, asígnale el valor del segundo operando:"

let myVariable = false;
myVariable &&= 2 + 2;
> false

myVariable = true;
myVariable &&= 2 + 2;
> 4

El valor verdadero o falso del primer operando determina si se realiza una asignación. Sin embargo, intentar evaluar el primer operando con un operador de comparación genera un valor booleano true o false, al que no se le puede asignar un valor:

let myVariable = 5;
myVariable > 2 &&= "My string"
> SyntaxError: Invalid left-hand side in assignment

El operador de asignación OR lógico (||=) evalúa el segundo operando y lo asigna al primer operando si este se evalúa como false, es decir, "si el primer operando es falso, asígnale el valor del segundo operando":

let myVariable = false;
myVariable ||= 2 + 2;
> 4

myVariable = true;
myVariable ||= 2 + 2;
> true

Verifica tu comprensión

¿Qué operador indica “igual exactamente”?

===
==
=
!=