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ć?
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
@andrzejfryczmodrzewski1503: ponieważ w pierwszej kolejności operator == jeżeli porównujemy liczbę i booleana zamienia true na liczbę, a nie liczbę na boolean 2==true 2===1 //false
@Melcma: tylko przy operatorach logicznych || && typy nie są konwertowane na "wspólne", tylko poszczególne argumenty są sprawdzane czy są "truthy" czy "falsy"
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:
@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
@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.
Nie do końca rozumiem operacje logiczne w JS.
Boolean(2)dajetrue.console.log(2 || true)daje2, czyli wychodzi, że2jest równetrue.Ale:
console.log(2==true)dajefalse. Czemu? Czemu tu2nie jesttrue? Nie zachodzi konwersja z int na bool? Czy jak? Może ktoś wyjaśnić?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
console.log(2==true)wychodzi, że 2 jest false?@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.
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
operator || a także inne operatory logiczne nie zwracają true ani false.
@Melcma: nie prawda, operator == najpierw dokonuje konwersji typów a potem sprawdza
console.log(false || 3) -> 3
console.log(3 || false) -> 3
console.log(false || true -> true
@andrzejfryczmodrzewski1503: ponieważ w pierwszej kolejności operator == jeżeli porównujemy liczbę i booleana zamienia true na liczbę, a nie liczbę na boolean
2==true
2===1 //false
Nie ma znaczenia kolejność argumentów
@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
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ć).falsyoznacza, że wyrażenie scastowane do booleana da FALSE. wartościami które sąfalsyto: null, undefined, false, 0 oraz pusty