Operatory logiczne ECMAScript

Operatory logiczne Boolean są bardzo ważne, ponieważ umożliwiają poprawne działanie języka programowania.

Operatory logiczne Boolean mają trzy rodzaje: NOT, AND i OR.

Operacja ToBoolean

Zanim przejdziemy do nauki różnych operatorów logicznych, przyjrzyjmy się operacji ToBoolean opisanej w normie ECMAScript-262 v5.

Abstrakcyjna operacja ToBoolean konwertuje swój parametr zgodnie z zasadami w poniższej tabeli:

Typ parametru Wynik
Nieokreślona false
Pusta false
Prawda Wynik jest równy wprowadzonemu parametrowi (nie jest przekształcany)
Liczba Jeśli parametr jest +0, -0 lub NaN, wynik jest fałszywy; w przeciwnym razie jest prawdziwy.
Łańcuch Jeśli parametr jest pustym łańcuchem, wynik jest fałszywy; w przeciwnym razie jest prawdziwy.
Obiekt true

Operator LOGIC NOT

W ECMAScript operator NOT logiczny jest taki sam jak w C i Java, i jest reprezentowany przez znak exclamation mark (!).

W przeciwieństwie do operatorów OR i AND logicznych,Operator NOT logiczny zawsze zwraca wartość Boolean.

Zachowanie operatora NOT logicznego jest takie:

  • Jeśli operand jest obiektem, zwraca false
  • Jeśli operand jest liczbą 0, zwraca true
  • Jeśli operand jest każdą liczbą inną niż 0, zwraca false
  • Jeśli operand jest null, zwraca true
  • Jeśli operand jest NaN, zwraca true
  • Jeśli operand jest undefined, występuje błąd

Zwykle operator ten jest używany do kontroli pętli:

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

W tym przykładzie zmienna Boolean (bFound) jest używana do rejestrowania sukcesu wyszukiwania. Kiedy dane elementy problemu są znalezione, bFound jest ustawiane na true, !bFound jest równe false, co oznacza, że执运行将跳出 while 循环。

Kiedy oceniamy wartość Boolean zmiennej ECMAScript, możemy również użyć operatora NOT logicznego. W tym celu potrzebujemy dwóch operatorów NOT w jednej linii kodu. Pierwszy operator NOT zwraca wartość Boolean, drugi operator NOT odwraca wartość Boolean, dając prawdziwą wartość logiczną zmiennej.

var bFalse = false;
var sRed = "red";
var iZero = 0;
var iThreeFourFive = 345;
var oObject = new Object;
document.write("Logiczna wartość bFalse wynosi " + (!!bFalse));
document.write("Logiczna wartość sRed wynosi " + (!!sRed));
document.write("Logiczna wartość iZero wynosi " + (!!iZero));
document.write("Logiczna wartość iThreeFourFive wynosi " + (!!iThreeFourFive));
document.write("Logiczna wartość oObject wynosi " + (!!oObject));

Wynik:

Logiczna wartość bFalse jest fałszem
Logiczna wartość sRed jest prawdą
Logiczna wartość iZero jest fałszem
Logiczna wartość iThreeFourFive jest prawdą
Logiczna wartość oObject jest prawdą 

Operator logicznego AND

W ECMAScript operator logicznego AND jest reprezentowany przez podwójne i (&&):

Przykład:

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

Poniższa tabela prawdy opisuje zachowanie operatora logicznego AND:

Argument 1 Argument 2 Wynik
true true true
true false false
false true false
false false false

Operandy operacji logicznego AND mogą być dowolnego typu, nie tylko wartościami Boolean.

Jeśli któryś z operandów nie jest oryginalną wartością Boolean, operacja logicznego AND niekoniecznie zwraca wartość Boolean:

  • Jeśli jeden z operandów jest obiektem, a drugi jest wartością Boolean, zwraca obiekt.
  • Jeśli oba operandy są obiektami, zwraca drugi obiekt.
  • Jeśli któryś z operandów jest null, zwraca null.
  • Jeśli któryś z operandów jest NaN, zwraca NaN.
  • Jeśli któryś z argumentów jest undefined, wystąpi błąd.

Podobnie jak operacja logicznego AND w języku Java, operacja logicznego AND w ECMAScript jest uproszczoną operacją, tzn. jeśli wartość pierwszego operandu decyduje o wyniku, drugi operand nie jest już obliczany. Dla operacji logicznego AND, jeśli wartość pierwszego operandu jest fałszem, wynik nie może być prawdą niezależnie od wartości drugiego operandu.

Rozważ poniższy przykład:

var bTrue = true;
var bResult = (bTrue && bUnknown); // wystąpi błąd
alert(bResult); // to polecenie nie zostanie wykonane

Ten kod spowoduje błąd podczas wykonywania operacji logicznego AND, ponieważ zmienna bUnknown jest niezdefiniowana. Wartość zmiennej bTrue wynosi true, ponieważ operacja logicznego AND będzie kontynuowana, obliczając wartość zmiennej bUnknown. Robienie tak spowoduje błąd, ponieważ wartość bUnknown jest niezdefiniowana i nie może być użyta w operacji logicznego AND.

Jeśli zmienisz ten przykład, ustawiając pierwszą liczbę na fałsz, błąd nie będzie miał miejsca:

var bFalse = false;
var bResult = (bFalse && bUnknown);
alert(bResult); // wyświetlenie "false"

W tym kodzie skrypt wyświetli wartość operacji logicznego AND, tj. ciąg "false". Nawet jeśli wartość zmiennej bUnknown wynosi undefined, nie zostanie ona obliczona, ponieważ wartość pierwszego operandu jest fałszem.

Wskazówka:Pamiętaj o tej cechy uproszczonego obliczenia operatora logicznego AND.

Operator logiczny OR

Operator logiczny OR w ECMAScript jest taki sam jak w Java, oba są reprezentowane przez podwójne znaki wodorowe (||):

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

Poniższa tabela prawdy opisuje zachowanie operatora logicznego OR:

Argument 1 Argument 2 Wynik
true true true
true false true
false true true
false false false

Jak operator logiczny AND, jeśli któryś z argumentów nie jest wartością Boolean, logiczny OR niekoniecznie zwraca wartość Boolean:

  • Jeśli argument jest obiektem, a wszystkie argumenty po jego lewej stronie są false, zwraca ten obiekt.
  • Jeśli oba argumenty są obiektami, zwraca pierwszy obiekt.
  • Jeśli ostatni argument jest null, a wszystkie inne argumenty są false, zwraca null.
  • Jeśli ostatni argument jest NaN, a wszystkie inne argumenty są false, zwraca NaN.
  • Jeśli któryś z argumentów jest undefined, wystąpi błąd.

Jak operator logiczny AND, logiczny OR jest uproszczonym obliczeniem. Dla operatora logicznego OR, jeśli wartość pierwszego argumentu jest true, drugi argument nie jest już obliczany.

Przykład:

var bTrue = true;
var bResult = (bTrue || bUnknown);
alert(bResult);			//Wyjście "true"

Jak w poprzednim przykładzie, zmienna bUnknown jest niezdefiniowana. Jednakże, ponieważ wartość zmiennej bTrue wynosi true, bUnknown nie zostanie obliczony, więc wyjście to "true".

Jeśli zmienisz bTrue na false, wystąpi błąd:

var bFalse = false;
var bResult = (bFalse || bUnknown);	//Wystąpi błąd
alert(bResult);			//Nie wykona się tego wiersza