Skracanie warunku -Javascript

Jeśli umiesz programować coś więcej niż pralkę automatyczną i telewizor to ten dział jest dla Ciebie. Pochwal się swoimi stronami internetowymi lub aplikacjami i skryptami.
BluesM
Raczkujący
Raczkujący
Posty: 67
Rejestracja: 15 maja 2011, 12:43
Znak zodiaku: Waga

Skracanie warunku -Javascript

Post autor: BluesM » 5 marca 2012, 15:58

Czy istnieją jakieś zasady "skracania warunków".

Bo jak odkryłem mogę napisać

if(x === 2 || 4) // x równa się 2 lub 4?

Ale już nie:

if((i % 3) && (i % 5) === 0) // BŁĄD!

Z góry dziękuję.

Awatar użytkownika
BoBsoN
Bywalec
Bywalec
Posty: 670
Rejestracja: 24 czerwca 2011, 17:58
Znak zodiaku: Wodnik
Lokalizacja: Jastrzębie-Zdrój
Kontakt:

Re: Skracanie warunku -Javascript

Post autor: BoBsoN » 21 marca 2012, 21:09

if(x === 2 || 4)

To trochę nie tak działa jak Ci się wydaje:
po jeden "===" oznacza strict equal, czyli nie dość, że ma być to samo, to tego samego typu, czyli
4 == '4' zwróci true, ale 4 === '4' zwróci false (bo różne typy [integer i string]).
Po dwa "||" wykonuje operację logicznego lub. Czyli tutaj twój warunek wygląda tak na prawdę następująco:

Kod: Zaznacz cały

if ( x === 2 || true ) 

a to dlatego, że prawidłowo twój nawias czyta się tak ( (x === 2) || 4 ), czyli najpierw wykonaj porównania a następnie operacje boolowskie na wartościach boolowskich lub ewaluacji danego elementu do bool. 4 (a dokładniej wszystko co nie jest null, undefined, empty string lub 0) ewaluowane jest do true.
Innymi słowy zrobiłeś if'a, który jest bez sensu bo zawsze zwraca true bez względu na zawartość zmiennej x.

jeśli nie wierzysz, to uruchom sobie kod:

Kod: Zaznacz cały

var z = 3;
if (z === 2 || 4) { alert(1); }else{ alert(2); }


Więcej informacji:
https://developer.mozilla.org/en/JavaSc ... _Operators
oraz
https://developer.mozilla.org/en/JavaSc ... _Operators
Jakże mógłbym nie mieć władzy? mienie władzy jest obowiązkiem króla!... tak więc zamilcz.

Awatar użytkownika
Mak
Raczkujący
Raczkujący
Posty: 31
Rejestracja: 27 marca 2008, 13:56
Znak zodiaku: Koziorożec
Lokalizacja: Zgierz

Re: Skracanie warunku -Javascript

Post autor: Mak » 23 marca 2012, 01:25

Zerknij jeszcze tu: https://developer.mozilla.org/en/JavaSc ... Precedence
żeby wiedzieć dlaczego if(x === 2 || 4) iest równe if((x === 2) || 4 )
Remember yesterday and think about tomorrow but you have to live today

ODPOWIEDZ