ECMAScript Boolean-operatører

Boolean-operatører er meget vigtige, da de gør det muligt for programmeringssprog at køre normalt.

Der er tre typer Boolean-operatører: NOT, AND og OR.

ToBoolean operation

Før vi lærer om forskellige logiske operatører, lad os først forstå ToBoolean-operationen beskrevet i ECMAScript-262 v5-specifikationen.

Abstrakt operation ToBoolean konverterer sine parametre i henhold til reglerne i nedenstående tabel:

Parameter type Resultat
Udefineret false
Null false
Boolean Resultatet er lig med inputparametret (ikke konverteret)
Number Hvis parameteren er +0, -0 eller NaN, er resultatet false; ellers er det true.
String Hvis parameteren er en tom streng, er resultatet false; ellers er det true.
Object true

Logisk NOT operatør

I ECMAScript er logisk NOT-operatoren den samme som i C og Java, og udtrykkes med udstødningstegnet (!).

Forskellige fra logiske OR- og AND-operatorerLogisk NOT-operatoren returnerer altid en Boolean-værdi.

Opførslen af logisk NOT-operatoren er som følger:

  • Hvis operanden er et objekt, returneres false
  • Hvis operanden er tallet 0, returneres true
  • Hvis operanden er ethvert tal uden for 0, returneres false
  • Hvis operanden er null, returneres true
  • Hvis operanden er NaN, returneres true
  • Hvis operanden er undefined, opstår der en fejl

Normalt bruges denne operator til at kontrollere løkker:

var bFound = false;
var i = 0;
mens (!bFound) {
  hvis (aValue[i] == vSearchValues) {
    bFound = true;
  } ellers {
    i++;
  }
}

I dette eksempel bruges Boolean-variablen (bFound) til at registrere, om søgningen lykkedes. Når dataelementet i problemet findes, sættes bFound til true, og !bFound er lig med false, hvilket betyder, at kørslen afbrydes fra while-løkken.

Når du vurderer ECMAScript-variablers Boolean-værdi, kan du også bruge logisk NOT-operatoren. Dette kræver to NOT-operatorer på en linje. Uanset hvilken type operanden er, returnerer den første NOT en Boolean-værdi. Den anden NOT negerer denne Boolean-værdi, hvilket giver variabelens faktiske Boolean-værdi.

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:

bFalses logiske værdi er false
sReds logiske værdi er true
iZeros logiske værdi er false
iThreeFoursFives logiske værdi er true
oObjects logiske værdi er true 

Logisk AND-operator

I ECMAScript repræsenteres den logiske AND-operator med dobbelt og-tegn (&&):

Eksempel:

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

Denne sandhedstabel beskriver opførslen af den logiske AND-operator:

Beregningsværdi 1 Beregningsværdi 2 Resultat
true true true
true false false
false true false
false false false

Operanderne til logisk AND-beregning kan være af enhver type, ikke kun Boolean-værdier.

Hvis en operand ikke er en oprindelig Boolean-værdi, behøver logisk AND-beregning ikke nødvendigvis at returnere en Boolean-værdi:

  • Hvis en operand er et objekt og den anden er en Boolean-værdi, returneres objektet.
  • Hvis begge operander er objekter, returneres det andet objekt.
  • Hvis en operand er null, returneres null.
  • Hvis en operand er NaN, returneres NaN.
  • Hvis en beregningsværdi er undefined, opstår der en fejl.

Ligesom den logiske AND-beregning i Java er den logiske AND-beregning i ECMAScript også en simpel beregning, hvilket betyder, at hvis den første operand bestemmer resultatet, vil den anden operand ikke blive beregnet. For logisk AND-beregning vil resultatet ikke kunne være true, hvis den første operand er false, uanset værdien af den anden operand.

Overvej følgende eksempel:

var bTrue = true;
var bResult = (bTrue && bUnknown); // fejler
alert(bResult); // denne linje vil ikke blive udført

Dette stykke kode vil forårsage en fejl under logisk AND-beregning, fordi variablen bUnknown er undefined. Variablen bTrue har værdien true, fordi den logiske AND-beregning fortsætter med at beregne variablen bUnknown. Dette vil forårsage en fejl, fordi bUnknown har værdien undefined og kan ikke bruges i en logisk AND-beregning.

Hvis du ændrer dette eksempel ved at sætte den første tal til false, vil der ikke opstå fejl:

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

I dette stykket kode vil scriptet udskrive værdien af den logiske AND-beregning, dvs. strengen "false". Selvom variablen bUnknown har værdien undefined, vil den ikke blive beregnet, fordi den første operandens værdi er false.

Tip:Når man bruger logisk AND-beregningsoperatoren, skal man huske dens enkle beregningsfunktion.

Logisk OR-beregningsoperator

Logisk OR-beregningsoperatoren i ECMAScript er den samme som i Java og representeres af dobbeltstregtegn (||):

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

Følgende sandhedstabeller beskriver opførslen af logisk OR-beregningsoperator:

Beregningsværdi 1 Beregningsværdi 2 Resultat
true true true
true false true
false true true
false false false

Som med logisk AND-beregningsoperator er logisk OR-beregning ikke nødvendigvis returnerer Boolean-værdi, hvis en beregningsværdi ikke er Boolean-værdi:

  • Hvis en beregningsværdi er et objekt, og de værdier til venstre for objektet er false, returneres objektet.
  • Hvis begge beregningsværdier er objekter, returneres det første objekt.
  • Hvis den sidste beregningsværdi er null, og de øvrige beregningsværdier er false, returneres null.
  • Hvis den sidste beregningsværdi er NaN, og de øvrige beregningsværdier er false, returneres NaN.
  • Hvis en beregningsværdi er undefined, opstår der en fejl.

Som med logisk AND-beregningsoperator er logisk OR-beregning også en simpel beregning. For logisk OR-beregningsoperatoren, hvis den første beregningsværdi er true, beregnes den anden beregningsværdi ikke længere.

Eksempel:

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

Som i de tidligere eksempler er variablen bUnknown ikke defineret. Dog, på grund af at variablen bTrue har værdien true, vil bUnknown ikke blive beregnet, og outputtet er "true".

Hvis bTrue ændres til false, opstår der en fejl:

var bFalse = false;
var bResult = (bFalse || bUnknown);	//Fejl opstår
alert(bResult);			//Denne linje vil ikke blive udført