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 . |