Autor Zpráva
SeparateSK
Profil
Dobrý deň, chcel by som vedieť aký je rozdiel medzi tým, keď napíšem: if(!funkcia(hodnota)) a if(funkcia(hodnota)!==true).
Príklad:
<script>
    function ret(c){
        if(c==1) return true;
        else return false;
    }
    if(ret(1)!==true)alert("FALSE");
</script>
a
<script>
    function ret(c){
        if(c==1) return true;
        else return false;
    }
    if(!ret(1))alert("FALSE");
</script>
Čo je vhodnejšie použiť keď sú 2 takéto zápisy, tak asi jedno by malo byť lepšie používať
finchCZ
Profil
Řekl bych, že je to jen o zvyku co použiješ. Někomu vyhovuje to, jinému ono, ale možná trochu přehlednější (u velkých projektů) je první možnost. Plus máš tam chybičku -> nemá být

if(ret(1)!==true)alert("FALSE");

ale

if(ret(1)!= true)alert("FALSE");
DJ Miky
Profil
finchCZ:
Nemá, !== skutečně existuje.

if(!funkce()) má stejný význam jako if(funkce() != true).
Operátory ekvivalence (=== a !==) kontrolují navíc i datový typ. Např.:
if("2" == 2) // projde
if("2" === 2) // neprojde

if(1 == true) // projde
if(1 === true) // neprojde
Tori
Profil
SeparateSK:
Jestli se nepletu, tak při if (!promenna) se hodnota proměnné nejdřív přetypuje na logickou a poté neguje, takže to víceméně odpovídá porovnávání if (promenna != true).
weroro
Profil
Zdravím

(!==) znamená, že sa nezhoduje, čo nie je to isté ako klasická negácia (!)

ak by sme napr. tento zápis použili pri číselných hodnotách, tak je tam rozdiel:
var a = 0;

if (!a)
{
    alert ("a sa nerovná nule");
}
else
{
    alert ("a sa rovná nule");
}
v tomto prípade sa a rovná nule, pretože !a bude chápané ako false, čoho je ekvivalent 0. 0 = false | 1 a viac = true
var a = 0;

if (a !== 0)
{
    alert ("a sa nerovná nule");
}
else
{
    alert ("a sa rovná nule");
}
v tomto prípade sa a rovná nule, pretože sme zadefinovali striktne, že to nesmie byť číselná hodnota 0

// edit

DJ Miky: ma predbehol a napísal to krajšie :)
Ale, keď tak premýšľam, tak toto if("2" == 2) v JS neprejde
finchCZ
Profil
aha, dobrá, moje neznalost tohoto

díky za opravu
Tori
Profil
weroro:
Ale, keď tak premýšľam, tak toto if("2" == 2) v JS neprejde
Projde. Viz manuál
weroro
Profil
O.o Pardon. Bola to iba nesprávna dedukcia, keďže som bol v tom, že JS je typovo založený.
Radek9
Profil
weroro:
Ne, JS je slabě typový. Tzn., že se při běžném porovnání snaží přetypovávat. Takže všechno toto bude platit:
//Logické hodnoty
""==0
0==false
""==false
null==false
1==true

//Čísla a stringy
2=="2"
3=="      3             "

Při použití ekvivalence ale nikoli.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0