Section34: Operatory logiczne
Operatory logiczne służą do sprawdzenia warunków z wieloma wyrażeniami, na przykład operacjami porównania.
Konwertowanie typu
W operacjach logicznych typy operandów są konwertowane na true lub false. Konwersja występuje, gdy w kodzie zostanie znaleziony operator logiczny.
Truthy i Falsy - terminy używane dla tych wartości, które w operacji logicznej są konwertowane na true lub false, chociaż jako takie nie miały typu boolean.
Istnieje 6 nieprawdziwych (false) wartości, które sprowadzają się do false (są falsy) w logicznej konwersji: 0, NaN, null, undefined, pusty string czyli "" i false. Wszystkie inne wartości sprowadzają się do true (są truthy).
Operatory logiczne
W JavaScript Istnieją trzy operatory logiczne, które służą do sprawdzania wyrażeń.
Logiczne «AND»(i)
Operator && sprowadzi wszystkie operandy do typu boolean i zwraca 'true' jeśli wszystkie operandy są prawdziwe. Operandy są sprawdzane w kolejności zapisu, więc jeśli lewy warunek jest false, prawy już nie będzie sprawdzany a całość wyrażenia zwróci false.
wyrażenie && wyrażenie
W poniższym przykładzie oba warunki zwrócą true, więc wynikiem całego wyrażenia będzie true - zostanie zwrócona wartość skrajnego prawego operandu.
const age = 20;
console.log(age > 10 && age < 30);// true && true -> true
Jeśli chociażby jeden z operandów będzie false, rezultat wyrażenia otrzyma jego wartość.
const age = 50;
console.log(age > 10 && age < 30);// true && false -> false
console.log(age > 80 && age < 120);// false && true -> false
Jak widzimy, logiczne «And(I)» szuka pierwszego operandu falsy i zwraca go, a jeśli go nie odnajdzie to zwróci ostatni w kolejności operand.
console.log(1 && 5);// true && true -> 5
console.log(5 && 1);// true && true -> 1
console.log(0 && 2);// false && true -> 0
console.log(2 && 0);// true && false -> 0
console.log("" && "Mango");// false && true -> ""
console.log("Mango" && "");// true && false -> ""
console.log("Mango" && "Poly");// true && true -> "Poly"
console.log("Poly" && "Mango");// true && true -> "Mango"
Przy wykonaniu logicznego «AND», prawy operand może nie być sprawdzony, jeśli lewy doprowadzi do false.
Logiczne «LUB(OR)»
Operator || konwertuje wszystkie operandy do typu boolean i zwraca wartość 'true' jeżeli chociaż jeden jest prawdziwy. Lewy operand, jeśli można go przekształcić na true, i prawy operand w przeciwnych wypadkach.
wyrażenie || wyrażenie
W poniższym przykładzie warunek po lewej stronie zwróci true, więc wynik całego wyrażenia będzie true - zostanie zwrócona wartość pierwszego operandu, który po wykonaniu go pokaże true.
const age = 5;
console.log(age < 10 || age > 30);// true || false -> true
Tutaj wynik też będzie true, ponieważ jeden z operandów, w tym wypadku ten po prawej po wykonaniu równał się true.
const age = 40;
console.log(age < 10 || age > 30);// false || true -> true
W kolejnym przykładzie żaden warunek nie był spełniony, dlatego otrzymujemy false - wartość ostatniego operanda.
const age = 20;
console.log(age < 10 || age > 30);// false || false -> false
Oznacza to, że logiczne «OR» wyłapuje pierwszą prawdę/wartość truthy i zwraca tę wartość lub ostatni w kolejności operand.
console.log(true || false);// true
console.log(false || true);// true
console.log(true || true);// true
console.log(3 || false);// 3
console.log(false || 3);// 3
console.log(3 || true);// 3
console.log(true || 3);// true
Przy wykonaniu logicznego «OR», prawy operand niekoniecznie musi być sprawdzony, jeśli lewy już był sprowadził się do true.
Logiczne «NO»
Wszystkie operatory, które omówiliśmy wcześniej, były binarne - zawierały dwa operandy, lewy i prawy. Logiczne "NIE" jest operatorem jednoargumentowym - operacje wykonują się na jednym operandzie po prawej stronie.
!wyrażenie
Operator ! konwertuje operand do typu boolean, jeśli jest to koniecznie. Później odbywa się inwersja - zmienia jego znaczenie na odwrotne true -> false lub false -> true.
console.log(!true);// false
console.log(!false);// true
console.log(!3);// !3 -> !true -> false
console.log(!"Mango");// !"Mango" -> !true -> false
console.log(!0);// !0 -> !false -> true
console.log(!"");// !"" -> !false -> true
const isOnline = true;
const isNotOnline = !isOnline;// !isOnline -> !true -> false