Operadores l贸gicos

Los operadores l贸gicos se usan t铆picamente con valores Boolean. En tal caso, regresan un valor Boolean. Sin embargo, los operadores && y || regresan en realidad el valor de uno de los operandos especificados, por lo que si estos operadores se usan con valores no Boolean, posiblemente regresen un valor no Boolean.

Descripci贸n

Los operadores l贸gicos se describen en la tabla siguiente:

Operador Uso Descripci贸n
AND (&&) l贸gico expr1 && expr2

Regresa expr1 si tal puede convertirse a false; de lo contrario, regresa expr2. De esta forma, cuando se usa con valores Boolean, && regresa true si ambos operandos son verdaderos; de lo contrario regresa false.

OR (||) l贸gico expr1 || expr2

Regresa expr1 si tal puede convertirse a true; de lo contrario, regresa expr2. De esta forma, cuando se usa con valores Boolean, || regresa true si cualquier operando es verdadero; pero si ambos son falsos, regresa "false".

NOT (!) l贸gico !expr

Regresa false si su 煤nico operando puede convertirse a true; de lo contrario, regresa true.

Algunos ejemplos de expresiones que pueden convertirse a false son aquellas que eval煤an a null, 0, un string vac铆o (""), o undefined.

A pesar de que los operadores && y ||  pueden ser usados con operandos que no son valores Boolean, a煤n pueden ser considerados como operadores Boolean porque sus valores de regreso siempre pueden convertirse a valores Boolean.

Evaluaci贸n contra "corto circuitos"

Ya que las expresiones l贸gicas son evaluadas de izquierda a derecha, se prueban con una evaluaci贸n contra posibles "cortos circuitos" usando las siguientes normas:

  • false && (cualquier valor) eval煤a a "false".
  • true || (cualquier valor) eval煤a a "true".

Las reglas de l贸gica garantizan que estas evaluaciones siempre son correctas. Se debe notar que la parte de "cualquier valor" en las expresiones anteriores no se eval煤a, para que tal acci贸n no afecte de ninguna forma. Adem谩s, es de notar que la parte de "cualquier valor" en las expresiones anteriores debe ser cualquier expresi贸n l贸gica (lo que se indica con los par茅ntesis).

Por ejemplo, las siguientes dos expresiones son equivalentes.

function shortCircuitEvaluation() {
  doSomething() || doSomethingElse()
}

function equivalentEvaluation() {
  var flag = doSomething();
  if (!flag) {
    doSomethingElse();
  }
}

Sin embargo, las siguientes expresiones no son equivalentes debido a la precedencia de operadores, y con tal ejemplo se enfatiza la importancia de que la parte derecha sea una 煤nica expresi贸n (agrupada en par茅ntesis si es necesario).

false && true  || true      // regresa true
false && (true || true)     // regresa false

AND (&&) l贸gico

El siguiente c贸digo muestra ejemplos del operador && (AND l贸gico).

a1 = true  && true      // t && t regresa true
a2 = true  && false     // t && f regresa false
a3 = false && true      // f && t regresa false
a4 = false && (3 == 4)  // f && f regresa false
a5 = "Cat" && "Dog"     // t && t regresa "Dog"
a6 = false && "Cat"     // f && t regresa false
a7 = "Cat" && false     // t && f regresa false

OR (||) l贸gico

El siguiente c贸digo muestra ejemplos del operador || (OR l贸gico).

o1 = true  || true       // t || t regresa true
o2 = false || true       // f || t regresa true
o3 = true  || false      // t || f regresa true
o4 = false || (3 == 4)   // f || f regresa false
o5 = "Cat" || "Dog"      // t || t regresa "Cat"
o6 = false || "Cat"      // f || t regresa "Cat"
o7 = "Cat" || false      // t || f regresa "Cat"

Logical NOT (!)

El siguiente c贸digo muestra ejemplos del operador ! (NOT l贸gico).

n1 = !true              // !t regresa false
n2 = !false             // !f regresa true
n3 = !"Cat"             // !t regresa false

Reglas de conversi贸n

Convertir de AND a OR

la siguiente operaci贸n que involucra Booleans:

bCondition1 && bCondition2

siempre es igual a:

!(!bCondition1 || !bCondition2)

Convertir de OR a AND

la siguiente operaci贸n que involucra Booleans:

bCondition1 || bCondition2

siempre es igual a:

!(!bCondition1 && !bCondition2)

Convertir entre operadores NOT

la siguiente operaci贸n que involucra Booleans:

!!bCondition

siempre es igual a:

bCondition

Eliminando par茅ntesis anidados

Ya que las expresiones l贸gicas son evaluadas de izquierda a derecha, siempre es posible eliminar par茅ntesis en una expresi贸n compleja, si se siguen ciertas reglas.

Eliminando operadores AND anidados

La siguiente operaci贸n compleja que involucra Booleans:

bCondition1 || (bCondition2 && bCondition3)

siempre es igual a:

bCondition1 || bCondition2 && bCondition3

Eliminando operadores OR anidados

La siguiente operaci贸n compleja que involucra Booleans:

bCondition1 && (bCondition2 || bCondition3)

siempre es igual a:

!(!bCondition1 || !bCondition2 && !bCondition3)

Especificaciones

Especificaci贸n Estado Comentarios
ECMAScript 1st Edition (ECMA-262) Standard Definici贸n inicial.
ECMAScript 5.1 (ECMA-262) Standard

Definido en varias secciones de la especificaci贸n: Logical NOT Operator, Binary Logical Operators

ECMAScript 2015 (6th Edition, ECMA-262) Standard Definido en varias secciones de la especificaci贸n: Logical NOT Operator, Binary Logical Operators
ECMAScript (ECMA-262) Living Standard Definido en varias secciones de la especificaci贸n: Logical NOT Operator, Binary Logical Operators

Compatibilidad entre navegadores

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help! (en-US)

Caracter铆stica Chrome Firefox (Gecko) Internet Explorer Opera Safari
AND (&&) l贸gico (Yes) (Yes) (Yes) (Yes) (Yes)
OR (||) l贸gico (Yes) (Yes) (Yes) (Yes) (Yes)
NOT (!) l贸gico (Yes) (Yes) (Yes) (Yes) (Yes)
Caracter铆stica Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
AND (&&) l贸gico (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)
OR (||) l贸gico (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)
NOT (!) l贸gico (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

Ver tambi茅n