This article has been localized into Czech by the community.
Logické operátory
Programování obecně je vše o logice, takže samozřejmě potřebujeme i nějaké logické operátory. V JavaScriptu najdete tři primární logické operátory:
- Operátor OR (Nebo): ||
- Operátor AND (A): &&
- Operátor NOT (negace): !
Čtvrtý operátor, nazývaný operátor spojování nulových hodnot (zapsaný jako ??), je také považován za logický operátor, ale o tomto budeme mluvit zvlášť v pozdějším článku. Nyní se podívejme na tři hlavní logické operátory.
Logický operátor OR (Nebo): ||
Logický operátor OR (Nebo) v JavaScriptu, stejně jako v mnoha dalších programovacích jazycích, je označen dvěma svislými čarami, takto: ||
Můžete jej použít kdykoli chcete napsat příkaz se dvěma nebo více podmínkami, kde stačí, když je jedna z nich pravdivá. Zde je příklad:
let a = 2, b = 0;
if(a > 0 || b > 0)
alert("True");
else
alert("False");
V tomto příkladu stačí, aby jedna z našich proměnných byla větší než 0, a protože proměnná a je, dostaneme zprávu "True".
Mějte na paměti, že každá podmínka je kontrolována zleva doprava, ale jakmile se narazí na operátor OR a předchozí podmínka se vyhodnotí jako pravdivá, zbytek podmínek nebude kontrolován. To může být relevantní v případech, kdy existuje mnoho podmínek a/nebo vyžadují těžké zpracování - v těchto situacích můžete chtít podmínky odpovídajícím způsobem uspořádat. Ověřme toto chování, zatímco vám ukážu, že samozřejmě můžeme mít více než dvě podmínky:
let a = 42, b = 0;
if(a > 0 || b > 0 || confirm('Are you sure?'))
alert("True");
else
alert("False");
Všimnete si, že i když jsem přidal volání funkce confirm(), příklad funguje stejně jako ten předchozí, protože jakmile je podmínka pravdivá a narazíme na operátor OR, zbývající podmínky přeskočíme, bez ohledu na to, jak vypadají.
Logický operátor AND (A): &&
Logický operátor AND by měl být v JavaScriptu (a mnoha dalších programovacích jazycích) napsán jako dva ampersandy, takto: &&
Měl by být použit vždy, když máte dvě nebo více podmínek, které musí být všechny pravdivé, aby bylo celé tvrzení pravdivé. Můžeme to otestovat použitím předchozího příkladu, ale změnou operátoru z OR na AND, takto:
let a = 2, b = 0;
if(a > 0 && b > 0)
alert("True");
else
alert("False");
Protože nyní používáme operátor AND, obě podmínky musí být pravdivé - tím pádem vyžadujeme, aby obě proměnné byly větší než 0, a protože proměnná b není, tvrzení selže a dostáváme zprávu "False".
A opět si všimnete, že každá podmínka je vyhodnocována zleva doprava a jakmile je operátor AND potkán a předchozí podmínka selhala, celé tvrzení selže. Toto můžeme znovu ilustrovat příkladem:
let a = 42, b = 0;
if(a > 0 && b > 0 && confirm('Are you sure?'))
alert("True");
else
alert("False");
Jak jsme viděli na příkladu s OR, volání funkce confirm() není dosaženo, v tomto případě proto, že celý příkaz selže, jakmile dojdeme k prostřední části, kde b musí být větší než nula.
Kombinování operátorů OR / AND
V některých situacích může být potřeba kombinovat tyto dva operátory (AND/OR). Samozřejmě je to možné, ale může být nutné použít závorky k seskupení operátorů podle potřeby, abyste dosáhli požadovaného výsledku. Při tomto postupu jsou podmínky v rámci sady závorek považovány za skupinu a vrátí buď TRUE nebo FALSE v závislosti na tom, které operátory použijete a co vrátí.
Můžete kombinovat logické operátory v jednom příkazu, ale při míchání logických operátorů musíte být vědomi něčeho, co se nazývá priorita operátorů. JavaScript to používá k rozhodnutí o pořadí, ve kterém jsou příkazy vyhodnocovány, což může vést k některým neočekávaným chováním, jak je ilustrováno tímto příkladem:
let a = 42, b = 0, c = 20;
if(a == 0 && b > 0 || c > 0)
alert("True");
else
alert("False");
Mým cílem zde bylo vytvořit příkaz, který by vyžadoval, aby a bylo 0 A zároveň buď b NEBO c bylo větší než 0. Ale kvůli prioritě operátorů, jakmile první podmínka selže (protože a není 0), přeskočí na druhou podmínku a přejde k třetí podmínce, která používá operátor OR, aby zajistila, že c je větší než 0, což je, což způsobí, že celý příkaz bude vyhodnocen jako pravda - to není to, co jsme chtěli.
V situaci jako je tato musíme přidat závorky, abychom JavaScriptu naznačili, které části příkazu chceme seskupit. Zde je přepsaný příklad, kde jsem přidal závorky - všimnete si, že se kromě přidaných závorek nic nezměnilo, a přesto nyní dostáváme chování, které jsem původně hledal, vrací False místo True:
let a = 42, b = 0, c = 20;
if(a == 0 && (b > 0 || c > 0))
alert("True");
else
alert("False");
Logický operátor NOT (negace): !
Posledním logickým operátorem, o kterém bych vám chtěl říci, je logický operátor NOT. Je také často označován jako operátor negace a v JavaScriptu, stejně jako v mnoha dalších programovacích jazycích, se píše vykřičníkem (!). Při jeho použití vezme výraz/operand a obrátí ho, v podstatě změní pravda na nepravda a nepravda na pravda.
Zde je velmi základní příklad jeho použití:
let a = false;
a = !a;
alert(a); // true
Všimněte si druhé řádky, kde používám logický operátor NOT (!) k převodu hodnoty boolean z false na hodnotu true. To lze použít i v podmíněném příkazu:
let a = false;
if(!a)
alert("Yes");
V tomto příkladu podmínka uspěje a zpráva bude zobrazena, i když byla proměnná „a“ původně false, protože používáme operátor NOT přímo před jejím ověřením, což v podstatě změní hodnotu false na true.
Dvojitý NOT operátor: !!
Čas od času se můžete setkat s dvojitým operátorem NOT. Zatímco logický operátor NOT hlavně pracuje s aktuálními boolean hodnotami, někdy se používá k převodu hodnoty, která je Truthy nebo Falsy, na skutečnou boolean hodnotu. Zde je příklad:
let a = 0;
a = !a;
alert(a); // true
Číslo 0 je považováno za Falsy hodnotu (ne za skutečnou boolean False, ale za něco, co lze za určitých okolností považovat za false, jak je popsáno zde). Při použití operátoru NOT na Falsy hodnotu je převedena na skutečnou boolean hodnotu a poté negována. Takže Falsy hodnota negovaná logickým operátorem NOT se stává boolean true a tak dále, jak je ilustrováno výše uvedeným příkladem.
Pokud chcete výsledek této konverze negovat, můžete použít dvojitý operátor NOT:
let a = 0;
a = !!a;
alert(a); // false
Jak vidíte, nyní v podstatě převádíme Falsy hodnotu na boolean true a poté na boolean false.
Shrnutí
Programování je vše o logice, takže samozřejmě potřebujeme nějaké logické operátory. V tomto článku jsme hovořili o operátorech OR, AND a NOT, které jsou hlavními logickými operátory JavaScriptu. V jednom z příštích článků budeme diskutovat o posledním z nich: Operátoru spojení s nulou (Nullish Coalescing operator, ??).