MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

Esta tradução está incompleta. Por favor, ajude a traduzir este artigo.

Resumo

Operadores lógicos são tipicamente usados com valores Booleanos (lógicos). Quando eles o são, retornam um valor booleano. Porêm, os operadores && e || atualmente retornam o valor de um dos operandos especificos, então seesses operadores sãousados com valores não booleanos, eles podem retornar um valor não booleano.

Descrição

Os operadores lógicos são descritos na tabela abaixo:

Operador Utilização Descrição
Logical AND (&&) expr1 && expr2 Returns expr1 if it can be converted to false; otherwise, returns expr2. Thus, when used with Boolean values, && returns true if both operands are true; otherwise, returns false.
Logical OR (||) expr1 || expr2 Returns expr1 if it can be converted to true; otherwise, returns expr2. Thus, when used with Boolean values, || returns true if either operand is true; if both are false, returns false.
Logical NOT (!) !expr Returns false if its single operand can be converted to true; otherwise, returns true.

Exemplos de expressões que podem ser convertidas para falso são aquelas que avaliampara null, 0, uma string vazia (""), ou indefinida.

Mesmo que os operadores && and || possam ser utilizados com operandos que não são valores Booleanos, esles ainda podem ser considerados como operadores booleanos visto que seus valores de saída sempre podem ser convertidos em valores booleanos.

Avaliação de Curto-Circuito (Short-Circuit) 

Conforme as expressões lógicas são avaliadas da esquerda para a direita, elas são testadas para uma possível avaliação de "curto-circuito" ("short-circuit") utilizando as seguintes regras:

  • false && (alguma coisa) é avaliado como falso através de curto-circuito.
  • true || (alguma coisa) é avaliado como verdadeiro através de curto-circuito.

As regras de lógica garamtem que essas avaliações estejam sempre corretas. Repare que a porção qualquer coisas das expressões acima não é avaliada, logo qualquer problema oriundo de tê-lo feito não é consumado. Note também  que a parte qualquer coisas das expressões acima pode ser qualquer expressão lógica unitária (conforme é indicado pelos parenteses).

Por exemplo, as duas funções a seguir são equivalentes.

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

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

Contudo, as expressões a seguir não são equivalentes, devido  procedência do operador, e reforçam a importância de que o operador do lado direito (right hand) seja uma única expressão(agrupada com o uso de parênteses, caso seja necessário).

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

AND Lógico (&&)

O código a seguir demonstra exemplos do operador && (AND lógico). 

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ógico (||)

O código a seguir demonstra exemplos do operador || (logical OR) operator.

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 Logico (!)

O código a seguir demonstra exemplos do operador ! (NOT lógico) .

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

Regras de conversão

Convertendo AND para OR

A operação a seguir, envolvendo Booleanos:

bCondition1 && bCondition2

é sempre igual a:

!(!bCondition1 || !bCondition2)

Convertendo OR to AND

A operação a seguir, envolvendo Booleanos:

bCondition1 || bCondition2

é sempre igual a:

!(!bCondition1 && !bCondition2)

Removendo parenteses aninhados

As logical expressions are evaluated left to right, it is always possible to remove parentheses from a complex expression following some rules.

Removendo AND aninhado

The following composite operation involving Booleans:

bCondition1 || (bCondition2 && bCondition3)

é igual a :

bCondition1 || bCondition2 && bCondition3

Removing nested OR

A operação composta a seguir, envolvendo Booleanos:

bCondition1 && (bCondition2 || bCondition3)

é sempre igual a:

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

Especificações

Especificação Estatus Comentário
ECMAScript 1st Edition. Standard Initial definition.
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 2015 (6th Edition, ECMA-262)
The definition of 'Logical NOT operator' in that specification.

ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Binary Logical Operators' in that specification.
Standard  

Compatibilidade com o Navegador

Recurso Chrome Firefox (Gecko) Internet Explorer Opera Safari
Logical AND (&&) (Yes) (Yes) (Yes) (Yes) (Yes)
Logical OR (||) (Yes) (Yes) (Yes) (Yes) (Yes)
Logical NOT (!) (Yes) (Yes) (Yes) (Yes) (Yes)
Feature Android Chrome para Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Logical AND (&&) (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)
Logical OR (||) (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)
Logical NOT (!) (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

Retrocompatibilidade: Comportamento no  JavaScript 1.0 e1.1

Os operadores  && and || se comportam da seguinte maneira:

Operador Utilização Comportamento
&& expr1 && expr2 If the first operand (expr1) can be converted to false, the && operator returns false rather than the value of expr1.
|| expr1 || expr2 If the first operand (expr1) can be converted to true, the || operator returns true rather than the value of expr1.

Veja Também

Etiquetas do documento e colaboradores

 Colaboradores desta página: atjoelson, SphinxKnight, eduardo_neto
 Última atualização por: atjoelson,