Úvod do úlohy

I zkušeným programátorům se občas stane, že zamění přiřazení za porovnání, přepíšou proměnnou nechtěným řetězením přiřazení nebo narazí na záludné přetypování. Tyto chyby jsou zrádné hlavně tím, že kód funguje—jen jinak, než čekáte. Cílem této části je naučit se takové situace rozpoznat, vysvětlit jejich chování a opravit je tak, aby výsledky byly jasné a předvídatelné.


Teorie a principy

  • Přiřazení vs. porovnání

    • = je přiřazení (vrací přiřazenou hodnotu).

    • == je volné porovnání (s typovou konverzí).

    • === je striktní porovnání (bez konverze typů) – preferovaná volba.

  • Přiřazení jako výraz

    • Výraz a = 5 má hodnotu 5. V podmínkách to může vést k nechtěnému chování.

  • Řetězení přiřazení

    • a = b = 0; je legální, ale méně čitelné. Navíc může nechtěně ovlivnit více proměnných najednou.

  • Přetypování (type coercion)

    • += s řetězcem provede konkatenaci, nikoli sčítání.

    • -= *= /= převádějí na čísla; neplatný převod dává NaN.

  • Strict mode a deklarace proměnných

    • V režimu "use strict" je přiřazení do nedefinované proměnné chyba. Pomáhá chytat překlepy a nechtěné globální proměnné.


Praktické příklady kódu

1) Nechtěné přiřazení v podmínce

 

2) Řetězení přiřazení a čitelnost

 

3) Neočekávané přetypování u +=

4) Volné vs. striktní porovnání

 

5) NaN při neplatném převodu

 

6) Zbytek po dělení u záporných čísel (%)

 

7) Nechtěné globální proměnné (bez strict mode)

 


Typické chyby / záludnosti

  • Záměna = za ==/=== v podmínkách → podmínka vždy „platí“ a maskuje chybu.

  • Řetězení přiřazení → nízká čitelnost, nechtěné vedlejší efekty.

  • Nevědomé přetypování → "5" + 5 → "55", ne 10; neplatný převod → NaN.

  • Neexistující deklarace proměnných (mimo strict mode) → tiché vytváření globálů.

  • Porovnání s volnou rovností == → překvapivé shody (např. "" == 0 je true).


Shrnutí

  • Důsledně rozlišujte přiřazení (=) a porovnání (=== doporučeno).

  • Přiřazení je výraz – v podmínkách může vyvolat skryté chyby.

  • Řetězení přiřazení používejte střídmě; upřednostněte čitelnost.

  • Kontrolujte přetypování u +=, -= apod.; validujte vstupy a používejte Number.isNaN.

  • V případě potřeby zajišťujte kladný zbytek u % a zapněte "use strict" (nebo TypeScript) pro odhalení chyb dřív.