ECMAScript Boolean-operatorer

Boolean-operatorer är mycket viktiga och gör att programSpråk kan fungera korrekt.

Det finns tre typer av Boolean-operatorer: NOT, AND och OR.

ToBoolean-operation

Innan vi lär oss olika logiska operatorer, låt oss först lära oss ToBoolean-operationen som beskrivs i ECMAScript-262 v5-specifikationen.

Abstrakt operation ToBoolean konverterar sina parametrar enligt reglerna i följande tabell:

Parametertyp Resultat
Undefined false
Null false
Boolean Resultatet är lika med den inmatade parametern (inte konverterad)
Number Om parametern är +0, -0 eller NaN, är resultatet false; annars true.
String Om parametern är en tom sträng, är resultatet false; annars true.
Object true

Logiskt NOT-operator

I ECMAScript är logisk NOT-operator samma som i C och Java, representerad av utropstecknet (!).

Skiljt från logiska OR- och AND-operatorer:Logisk NOT-operator returnerar alltid ett Boolean-värde.

Beteendet hos logisk NOT-operator är som följer:

  • Om operanden är ett objekt returneras false
  • Om operanden är talet 0 returneras true
  • Om operanden är något annat än 0 returneras false
  • Om operanden är null returneras true
  • Om operanden är NaN returneras true
  • Om operanden är undefined inträffar ett fel

Normalt används denna operator för att styra loopen:

var bFound = false;
var i = 0;
medan (!bFound) {
  om (aValue[i] == vSearchValues) {
    bFound = true;
  } annars {
    i++;
  }
}

I detta exempel används Boolean-variabeln (bFound) för att registrera om sökningen är framgångsrik. När dataelementet i problemet hittas sätts bFound till true, !bFound blir false, vilket innebär att loopen avslutas.

När du bedömer ECMAScript-variablens Boolean-värde kan du också använda logisk NOT-operator. För att göra detta behöver du använda två NOT-operatorer på en rad. Oavsett vad operanden är, returnerar den första NOT-operatorn ett Boolean-värde. Den andra NOT-användningen tar negationen av det Boolean-värdet, vilket ger det verkliga Boolean-värdet för variabeln.

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));

Resultat:

bFalse:s logiska värde är false
sRed:s logiska värde är true
iZero:s logiska värde är false
iThreeFourFive:s logiska värde är true
oObject:s logiska värde är true 

Logisk AND-operator

I ECMAScript representeras logisk AND-operatorn med dubbla och-tecken (&&):

Exempel:

var bTrue = true;
var bFalse = false;
var bResult = bTrue && bFalse;

Följande sanningsvärdes tabell beskriver beteendet för logisk AND-operatorn:

Beräkningsvärde 1 Beräkningsvärde 2 Resultat
true true true
true false false
false true false
false false false

Operanden för logisk AND-operation kan vara vilket typ av värde som helst, inte bara Boolean-värden.

Om en operand inte är en ursprunglig Boolean-värdes typ, returneras inte nödvändigtvis ett Boolean-värde av logisk AND-operation:

  • Om en operand är ett objekt och den andra är ett Boolean-värde, returneras det aktuella objektet.
  • Om båda operanderna är objekt, returneras det andra objektet.
  • Om någon operand är null, returneras null.
  • Om någon operand är NaN, returneras NaN.
  • Om någon beräkningsvärde är undefined inträffar ett fel.

Likt logisk AND-operation i Java är logisk AND-operation i ECMAScript också en enkel operation, vilket innebär att om det första operandens värde redan beslutar om resultatet, kommer den andra operanden inte att beräknas. För logisk AND-operation, om det första operandens värde är false, kommer resultatet inte att kunna vara true oavsett vad den andra operandens värde är.

Överväg följande exempel:

var bTrue = true;
var bResult = (bTrue && bUnknown);	//Fel inträffar
alert(bResult);			//Denna rad kommer inte att köras

Detta kodavsnitt kommer att kasta ett fel vid logisk AND-operation, eftersom variabeln bUnknown är undefined. Variabeln bTrue har värdet true, eftersom logisk AND-operation kommer att fortsätta beräkna variabeln bUnknown. Detta leder till ett fel eftersom bUnknown har värdet undefined och kan inte användas i en logisk AND-operation.

Om du ändrar detta exempel och sätter det första talet till false, kommer inget fel att inträffa:

var bFalse = false;
var bResult = (bFalse && bUnknown);
alert(bResult);			//Visa "false"

I detta kodavsnitt kommer skriptet att visa värdet som returneras av logisk AND-operation, dvs. strängen "false". Även om variabeln bUnknown har värdet undefined kommer den inte att beräknas, eftersom det första operandens värde är false.

Tips:När du använder logisk AND-operator måste du komma ihåg dess egenskap att vara en enkel beräkning.

Logisk OR-operator

Logisk OR-operatorn i ECMAScript är samma som i Java och representeras av dubbla vertikala streck (||):

var bTrue = true;
var bFalse = false;
var bResult = bTrue || bFalse;

Följande sannhetsvärdestabell beskriver beteendet för logisk OR-operator:

Beräkningsvärde 1 Beräkningsvärde 2 Resultat
true true true
true false true
false true true
false false false

Som med logisk AND-operator är det inte nödvändigtvis sant att logisk OR returnerar ett Boolean-värde om ett beräkningsvärde inte är ett Boolean-värde:

  • Om ett beräkningsvärde är ett objekt och de andra beräkningsvärdena till vänster om objektet är false, returneras objektet.
  • Om båda beräkningsvärdena är objekt returneras det första objektet.
  • Om det sista beräkningsvärdet är null och de andra beräkningsvärdena är false, returneras null.
  • Om det sista beräkningsvärdet är NaN och de andra beräkningsvärdena är false, returneras NaN.
  • Om någon beräkningsvärde är undefined inträffar ett fel.

Som med logisk AND-operator är logisk OR också en enkel beräkning. För logisk OR-operator är det så att om den första beräkningsvärdet är true behöver den andra beräkningsvärdet inte beräknas.

Exempel:

var bTrue = true;
var bResult = (bTrue || bUnknown);
alert(bResult);			//Output "true"

Liksom i föregående exempel är variabeln bUnknown inte definierad. Men eftersom variabeln bTrue har värdet true beräknas inte bUnknown, och utdata är "true".

Om du ändrar bTrue till false inträffar ett fel:

var bFalse = false;
var bResult = (bFalse || bUnknown);	//Ett fel inträffar
alert(bResult);			//Detta raden kommer inte att köras