Operadors Lògics

Resum

Els operadors lògics s'utilitzen normalment amb valors Boolean (lògics). En cas de serh-hi presents, retornen un valor booleà. Tot i així, els operadors && i || retornen el valor d'un dels operands especificats, així que si aquests operadors es fan servir amb valors no booleans, poden retornar un valor no booleà.

Descripció

Els operadors lògics es descriuren en la taula següent:

Operador Ús Descripció
AND lògic (&&) expr1 && expr2 Retorna expr1 si es pot convertir en false; sinó, retorna expr2. Així, quan es fa servir amb valors booleans, && retorna true si ambdós operands són true; de ser el contrari, retorna false.
OR lògic(||) expr1 || expr2 Retorna expr1 si es pot converir en true; de ser al contrari, retorna expr2. Així, quan s'usa amb valors Booleans, || retorna true si l'operand és true; si amdós són false, retorna false.
NOT lògic (!) !expr Retorna false si el seu únic operand pot convertir-se a true; sinó, retorna true.

Exemples d'expressions que es poden converir a false son aquelles que avaluen null, 0, la cadena buida (""), o undefined.

Tot i que els operadors && i || es poden fer servir amb operands que no siguin valors Booleans, poden ser considerats operadors Booleans ja que els valors que retornen sempre es poden convertir en valors Booleans.

Avaluació de tipus curtcircuit

Com a expressions lògiques que són, s'avaluen d'esquerra a dreta, they are tested for possible "short-circuit" evaluation fent servir les regles següents:

  • false && (quelcom) is short-circuit evaluated to false.
  • true || (quelcom) is short-circuit evaluated to true.

Les regles de la lògica garanteixen que aquestes avaluacions són sempre correctes. Fixeu-vos que la part quelcom d'adalt no s'avalua, així que els efectes secundaris d'això no tindràn efecte. Fixeu-vos també que la part de l'expressió de dalt anomenada quelcom és una expressió lògica simple (com s'indiquen amb els parèntesis).

Per exemple, les dues funcions següents són equivalents.

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

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

Tot i així, les següents expressions no són equivalents degut a la precendència dels operadors, i remarca la importància de requerir que l'operador de la dreta sigui una sola expressió (agrupada, si s'escau, per parèntesi).

false && true  || true      // returns true
false && (true || true)     // returns false

AND lògic (&&)

El codi següent mostra exemples de l'operador && (AND lògic).

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

OR lògic (||)

El codi següent mostra exemples de l'operador || (OR lògic).

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

NOT lògic (!)

El codi següent mostra exemples de l'operador ! (NOT lògic).

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

Regles de conversió

Convertir AND a OR

L'operació següent que inclou Booleans:

bCondition1 && bCondition2

sempre és igual a:

!(!bCondition1 || !bCondition2)

Convertir OR a AND

L'operació següent que inclou Booleans:

bCondition1 || bCondition2

sempre és igual a:

!(!bCondition1 && !bCondition2)

Desfer-se de parèntesis aniuats

Com que les expressions lògiques s'avaluen d'esquerra a dreta, sempre és posible esborrar els parèntesi d'expressions complexes mitjançant les regles següents.

Desfer-se d'un AND aniuat

L'operació següent que inclou Booleans:

bCondition1 || (bCondition2 && bCondition3)

sempre és igual a:

bCondition1 || bCondition2 && bCondition3

Desfer-se d'un OR aniuat

L'operació següent que inclou Booleans:

bCondition1 && (bCondition2 || bCondition3)

sempre és igual a:

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

Especificacions

Especificació Estat Comentari
1a edició de ECMAScript. Estàndard Definició inicial.
ECMAScript 5.1 (ECMA-262)
The definition of 'Logical NOT Operator' in that specification.

ECMAScript 5.1 (ECMA-262)
The definition of 'Binary Logical Operators' in that specification.
Standard  
ECMAScript 6 (ECMA-262)
The definition of 'Logical NOT operator' in that specification.

ECMAScript 6 (ECMA-262)
The definition of 'Binary Logical Operators' in that specification.
Release Candidate  

Compatibilitat amb navegadors

Característica Chrome Firefox (Gecko) Internet Explorer Opera Safari
AND lògic (&&) (Yes) (Yes) (Yes) (Yes) (Yes)
OR lògic (||) (Yes) (Yes) (Yes) (Yes) (Yes)
NOT lògic (!) (Yes) (Yes) (Yes) (Yes) (Yes)
Característica Android Chrome per Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
AND lògic (&&) (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)
OR lògic (||) (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)
NOT lògic (!) (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

Compatibilitat amb versions anteriors: Comportament a JavaScript 1.0 i 1.1

Els operadors && i || es comporten de la forma següent:

Operador Ús Comportament
&& expr1 && expr2 Si el primer operand (expr1) es pot converitr a false, l'operador && retorna false en comptes del valor de expr1.
|| expr1 || expr2 Si el primer operand (expr1) es pot converitr a true, l'operador || retorna true en comptes del valor de expr1.

Vegeu també

Document Tags and Contributors

 Contributors to this page: teoli, enTropy, llue
 Last updated by: teoli,