Operadores booleanos do ECMAScript
- Página anterior Operadores bit a bit
- Próxima página Operadores aritméticos
Os operadores booleanos são muito importantes, pois permitem que a linguagem de programação funcione corretamente.
Os operadores booleanos têm três tipos: NOT, AND e OR.
Operação ToBoolean
Antes de aprendermos sobre vários operadores lógicos, vamos entender a operação ToBoolean descrita na especificação ECMAScript-262 v5.
A operação abstrata ToBoolean converte seus parâmetros conforme as regras da tabela a seguir:
Tipo de parâmetro | Resultado |
---|---|
Indefinido | false |
Nulo | false |
Booleano | O resultado é igual ao parâmetro de entrada (sem conversão) |
Número | Se o parâmetro for +0, -0 ou NaN, o resultado é false; caso contrário, é true. |
String | Se o parâmetro for uma string vazia, o resultado é false; caso contrário, é true. |
Objeto | true |
Operador lógico NOT
No ECMAScript, o operador NOT lógico é o mesmo que o operador NOT lógico em C e Java, representado pelo sinal de exclamação (!).
Diferente dos operadores lógicos OR e AND,O operador NOT lógico sempre retorna um valor Booleano.
O comportamento do operador NOT lógico é o seguinte:
- Se o operando for um objeto, retornará false
- Se o operando for o número 0, retornará true
- Se o operando for qualquer número além de 0, retornará false
- Se o operando for null, retornará true
- Se o operando for NaN, retornará true
- Se o operando for undefined, ocorrerá um erro
Normalmente, esse operador é usado para controlar loops:
var bFound = false; var i = 0; while (!bFound) { if (aValue[i] == vSearchValues) { bFound = true; } else { i++; } }
Neste exemplo, a variável Booleana (bFound) é usada para registrar se a busca foi bem-sucedida. Quando o item de dados no problema for encontrado, bFound será configurado como true, !bFound será igual a false, o que significa que o loop while será encerrado.
Quando avaliar o valor Boolean de uma variável ECMAScript, também pode-se usar o operador lógico NOT. Isso requer o uso de dois operadores NOT em uma linha de código. Independentemente do tipo do operando, o primeiro operador NOT retorna um valor Booleano. O segundo NOT negará esse valor Booleano, fornecendo o valor Booleano real da variável.
var bFalse = false; var sRed = "red"; var iZero = 0; var iThreeFourFive = 345; var oObject = new Object; document.write("bFalse 的逻辑值是 " + (!!bFalse)); document.write("sRed 的逻辑值是 " + (!!sRed)); document.write("iZero 的逻辑值是 " + (!!iZero)); document.write("iThreeFourFive 的逻辑值是 " + (!!iThreeFourFive)); document.write("oObject 的逻辑值是 " + (!!oObject));
Resultado:
O valor lógico do bFalse é false O valor lógico do sRed é true O valor lógico do iZero é false O valor lógico do iThreeFourFive é true O valor lógico do oObject é true
Operador lógico AND
No ECMAScript, o operador lógico AND é representado por dois e (&&):
Por exemplo:
var bTrue = true; var bFalse = false; var bResult = bTrue && bFalse;
A tabela de verdade a seguir descreve o comportamento do operador lógico AND:
Operando 1 | Operando 2 | Resultado |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
Os operandos da operação lógica AND podem ser de qualquer tipo, não apenas valores Booleanos.
Se algum operando não for um valor Booleano original, a operação lógica AND não retorna necessariamente um valor Booleano:
- Se um operando for um objeto e o outro for um valor Booleano, retorna o objeto.
- Se ambos os operandos forem objetos, retorna o segundo objeto.
- Se algum operando for null, retorna null.
- Se algum operando for NaN, retorna NaN.
- Se algum dos operandos for undefined, ocorre erro.
Semelhante à operação lógica AND em Java, a operação lógica AND em ECMAScript é uma operação simples, ou seja, se o primeiro operando determinar o resultado, o segundo operando não será calculado. Para a operação lógica AND, se o primeiro operando for false, independentemente do valor do segundo operando, o resultado nunca pode ser true.
Considere o seguinte exemplo:
var bTrue = true; var bResult = (bTrue && bUnknown); // Ocorre erro alert(bResult); // Esta linha não será executada
Este código provocará um erro ao realizar a operação lógica AND, pois a variável bUnknown é undefined. O valor da variável bTrue é true, pois a operação lógica AND continuará a calcular a variável bUnknown. Isso provocará um erro, pois o valor de bUnknown é undefined e não pode ser usado na operação lógica AND.
Se modificar este exemplo, definindo o primeiro número como false, não ocorrerá erro:
var bFalse = false; var bResult = (bFalse && bUnknown); alert(bResult); // Exibe "false"
Neste código, o script exibe o valor retornado pela operação lógica AND, ou seja, a string "false". Mesmo se o valor da variável bUnknown for undefined, ela não será calculada, pois o valor do primeiro operando é false.
Dica:Ao usar o operador lógico AND, lembre-se de que ele tem essa característica de cálculo simplificado.
Operador lógico OR
O operador lógico OR no ECMAScript é o mesmo que no Java, representado por duas barras verticais (||):
var bTrue = true; var bFalse = false; var bResult = bTrue || bFalse;
A tabela de verdade a seguir descreve o comportamento do operador lógico OR:
Operando 1 | Operando 2 | Resultado |
---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
Como o operador lógico AND, se algum dos operandos não for um valor Booleano, a operação lógica OR não retorna necessariamente um valor Booleano:
- Se um dos operandos for um objeto e todos os valores à esquerda do objeto forem false, retorna o objeto.
- Se ambos os operandos forem objetos, retorna o primeiro objeto.
- Se o último operando for null e todos os outros operandos forem false, retorna null.
- Se o último operando for NaN e todos os outros operandos forem false, retorna NaN.
- Se algum dos operandos for undefined, ocorre erro.
Como o operador lógico AND, a operação lógica OR também é uma operação simplificada. Para o operador lógico OR, se o primeiro valor de operação for true, o segundo valor de operação não será calculado.
Por exemplo:
var bTrue = true; var bResult = (bTrue || bUnknown); alert(bResult); // Saída "true"
Como no exemplo anterior, a variável bUnknown é não definida. No entanto, devido ao valor true da variável bTrue, bUnknown não será calculado, portanto, a saída é "true".
Se você mudar bTrue para false, ocorrerá erro:
var bFalse = false; var bResult = (bFalse || bUnknown); // Ocorre erro alert(bResult); // Esta linha não será executada
- Página anterior Operadores bit a bit
- Próxima página Operadores aritméticos