Wpis z mikrobloga

#naukaprogramowania #javascript

Nie do końca rozumiem operacje logiczne w JS.

Boolean(2) daje true.
console.log(2 || true) daje 2, czyli wychodzi, że 2 jest równe true.
Ale:
console.log(2==true) daje false. Czemu? Czemu tu 2 nie jest true? Nie zachodzi konwersja z int na bool? Czy jak? Może ktoś wyjaśnić?
  • 18
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@andrzejfryczmodrzewski1503:

console.log(2 || true) - operator || or działa tak, że jeżeli pierwszy argument, w twoim przypadku liczba "2" jest true, to całość zwraca true, a liczby inne niż 0 są true, czyli "jeżeli 2 lub true -> zwróć true"

console.log(2==true) daje false - tutaj robisz zupełnie coś innego niż przykład na górze
  • Odpowiedz
console.log(2==true) daje false - tutaj robisz zupełnie coś innego niż przykład na górze


@Melcma: To co tutaj robię? ( ͡° ͜ʖ ͡°) Co się tam w środku dzieje?

@epi No tak, ale czemu nie konwertuje tej 2 do wartości bool? Skoro Boolean(2) == true, to na logikę przy 2==true też powinno wyjść true.
  • Odpowiedz
@andrzejfryczmodrzewski1503: sprawdzasz czy wartość 2 jest taka sama jak wartość true, a nie jest taka sama, bo 2 i true to coś innego, ale za to:

console.log(2 || true) - tutaj "2" nie jest równoznaczna z true, tylko całe to wyrażenie ZWRACA true

Chyba nic nie pokręciłem
  • Odpowiedz
@regis3: może pomyliłem nazwy, ale z tego wynika to, że wypisuje false, przykład:

console.log(false || 3) -> 3
console.log(3 || false) -> 3
console.log(false || true -> true
  • Odpowiedz
console.log(2 || true) daje 2, czyli wychodzi, że 2 jest równe true.


@andrzejfryczmodrzewski1503: to jest głowny problem. To zdanie nie jest prawdziwe. Operatory które zwracają true/false to operatory porównania i negacji:


Operator || oraz && nie zwraca true
  • Odpowiedz
@andrzejfryczmodrzewski1503: operator || w javascripcie funkcjonuje troszkę inaczej niż w innych językach.

W typowych językach operator || działa jak && oraz inne tego typu - konwertuje całe wyrażenie do booleana.
Np w Javie/C#/C++/PHP/czymkolwiek: ( 5 || true ) -> true ; ( false || true ) -> true ; ( 5 || 3 ) -> true itp.

Aby wyjaśnik jak to działa w JS, najpierw wprowadzimy jeden termin: wartość może być falsy (nie wiem jak to na polskie przeinaczyć). falsy oznacza, że wyrażenie scastowane do booleana da FALSE. wartościami które są falsy to: null, undefined, false, 0 oraz pusty
  • Odpowiedz
@andrzejfryczmodrzewski1503: Te operacje logiczne są identyczne w większości popularnych języków programowania. W Pythonie jest dokładnie tak samo, w Javie, PHP i C# też. Tak zostało odgórnie przyjęte, że każda liczba większa od 0 jest traktowana jak 'prawda'. Operator || sprawdza czy wartość jest prawdą. Zgodnie z przyjętym założeniem 2 zwraca prawdę. Operator porównania, nie sprawdza czy jedno lub drugie wyrażenie jest prawdą, ale bada ich równość względem siebie, czyli np.
  • Odpowiedz