ECMAScript Boolean-laskinmerkit

Boolean-laskinmerkit ovat erittäin tärkeitä, koska ne mahdollistavat ohjelmointikielen toiminnan.

Boolean-laskinmerkit ovat kolmea tyyppiä: NOT, AND ja OR。

ToBoolean-toiminto

Ennen kuin opimme erilaisia loogisia laskinmerkkejä, tutkitaan ensin ECMAScript-262 v5 -standardissa kuvattua ToBoolean-toimintoa.

Abstrakti operaatio ToBoolean muuntaa parametrinsa seuraavissa säännöissä määritettyyn logiikkaväliin:

Parametrin tyyppi Tulos
Undefined false
Null false
Boolean Tuloksena on syötteen parametri (ei muuteta)
Number Jos parametri on +0, -0 tai NaN,tuloksena on false;muuten true。
String Jos parametri on tyhjä merkkijono, tuloksena on false;muuten true。
Object true

Looginen NOT-laskin

ECMAScriptissä logiikkaa NOT-laskin toimii samalla tavalla kuin C ja Java -kielissä, ja se merkitään kolmipisteellä (!).

Eri kuin logiikkaa OR ja AND-laskin,Logiikkaa NOT-laskinnin palauttama on aina Boolean-arvo.

Logiikkaa NOT-laskinnin toiminta on seuraava:

  • Jos operaattorin arvo on objekti, palauttaa false
  • Jos operaattorin arvo on nolla, palauttaa true
  • Jos operaattorin arvo on minkään muun kuin nollan luku, palauttaa false
  • Jos operaattorin arvo on null, palauttaa true
  • Jos operaattorin arvo on NaN, palauttaa true
  • Jos operaattorin arvo on undefined, tapahtuu virhe

Yleensä tämä operaattori käytetään silmukan hallintaan:

var bFound = false;
var i = 0;
while (!bFound) {
  if (aValue[i] == vSearchValues) {
    bFound = true;
  } else {
    i++;
  }
}

Tässä esimerkissä Boolean-muuttuja (bFound) käytetään onnistumisen seurantaan. Kun löydetään ongelman tietue, bFound asetetaan true:ksi, ja !bFound on false, mikä tarkoittaa, että suoritusluku lopetetaan while-silmukasta.

Kun arvioidaan ECMAScript-muuttujien Boolean-arvoja, voidaan käyttää logiikkaa NOT-laskinta. Tämä vaatii kaksi NOT-laskinta yhdessä rivissä. Ensimmäinen NOT-laskin palauttaa Boolean-arvon riippumatta operaattorin tyylistä. Toinen NOT-laskin kääntää kyseisen Boolean-arvon, jolloin saadaan muuttujan todellinen Boolean-arvo.

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

Tulos:

bFalse:n looginen arvo on false
sRed:n looginen arvo on true
iZero:n looginen arvo on false
iThreeFourFive:n looginen arvo on true
oObject:n looginen arvo on true 

Loogisen ja-opelemisen operaattori

ECMAScriptissä loogisen ja-opelemisen operaattori esitetään kahdella ja-logolla (&&):

Esimerkiksi:

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

Seuraava totuustaulukko kuvaa loogisen ja-opelemisen käyttäytymistä:

Operaattori 1 Operaattori 2 Tulos
true true true
true false false
false true false
false false false

Loogisen ja-opelemisen laskurit voivat olla mitä tahansa tyyppiä, ei vain Boolean-arvoja.

Jos jokin laskuri ei ole alkuperäinen Boolean-arvo, loogisen ja-opelemisen laskuri ei välttämättä palauta Boolean-arvoa:

  • Jos yksi laskuri on objekti ja toinen Boolean-arvo, palauttaa kyseisen objektin.
  • Jos molemmat laskurit ovat objekteja, palauttaa toisen objektin.
  • Jos jokin laskuri on null, palauttaa null.
  • Jos jokin laskuri on NaN, palauttaa NaN.
  • Jos jokin operaattori on määrittelemätön, tapahtuu virhe.

Kuten Java:ssa, ECMAScriptissä oleva looginen ja-opeleminen on yksinkertainen operaatio, eli jos ensimmäinen laskuri määrittää tuloksen, toista laskuria ei enää lasketa. Loogiselle ja-opelemiselle, jos ensimmäinen laskuri on false, tuloksen ei voi olla true riippumatta toisen laskurin arvosta.

Harkitse seuraavaa esimerkkiä:

var bTrue = true;
var bResult = (bTrue && bUnknown);	//virhe tapahtuu
alert(bResult);			//tämä rivi ei suoriteta

Tämä koodi aiheuttaa virheen loogisen ja-opelemisen aikana, koska muuttuja bUnknown on määrittelemätön. Muuttujan bTrue arvo on true, koska loogisen ja-opelemisen laskenta jatkuu muuttujan bUnknown kanssa. Tämä aiheuttaa virheen, koska bUnknown arvo on undefined ja sitä ei voida käyttää loogisessa ja-opelemisessa.

Jos muutat tätä esimerkkiä ja asetat ensimmäisen luvun falseksi, ei tapahdu virhettä:

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

Tässä koodissa skripti tulostaa loogisen ja-opelemisen palauttaman arvon, eli merkkijonon "false". Vaikka muuttujan bUnknown arvo on undefined, sitä ei lasketa, koska ensimmäisen laskurin arvo on false.

Vinkki:Kun käytetään loogista AND operaattoria, on muistettava sen yksinkertainen laskentarakenteen ominaisuus.

Looginen OR operaattori

ECMAScriptissä oleva looginen OR operaattori on sama kuin Java:ssa, ja se edustetaan kahdella pystysuoralla (||):

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

Seuraava totuustaulukko kuvaa loogisen OR operaattorin käyttäytymistä:

Operaattori 1 Operaattori 2 Tulos
true true true
true false true
false true true
false false false

Kuten loogisen AND operaattorin tapauksessa, jos jokin operaattori ei ole Boolean-arvo, looginen OR operaattori ei välttämättä palauta Boolean-arvoa:

  • Jos jokin operaattori on objekti ja objektin vasemmanpuoliset operaattorin arvot ovat kaikki false, palautetaan objekti.
  • Jos molemmat operaattorit ovat objekteja, palautetaan ensimmäinen objekti.
  • Jos viimeinen operaattori on null ja kaikki muut operaattorin arvot ovat false, palautetaan null.
  • Jos viimeinen operaattori on NaN ja kaikki muut operaattorin arvot ovat false, palautetaan NaN.
  • Jos jokin operaattori on määrittelemätön, tapahtuu virhe.

Kuten loogisen AND operaattorin tapauksessa, looginen OR operaattori on myös yksinkertainen operaattori. Loogiselle OR operaattorille, jos ensimmäinen operaattorin arvo on true, toista operaattoria ei enää lasketa.

Esimerkiksi:

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

Kuten edellisessä esimerkissä, muuttuja bUnknown on määrittelemätön. Kuitenkin, koska muuttujan bTrue arvo on true, bUnknown ei lasketa, joten tuloksena on "true".

Jos muutat bTrue:ää falseksi, tapahtuu virhe:

var bFalse = false;
var bResult = (bFalse || bUnknown);	// tapahtuu virhe
alert(bResult);			// Tämä rivi ei suoriteta