Powrót do: TypeScript dla Testera – Ekspresowe Podstawy (i za darmo!)
Zmienne prawdziwe i nieprawdziwe (truthy i falsy)
Prezentacja
Tu w przyszłości mogą pojawić się dodatkowe materiały w postaci prezentacji etc.
Dodatkowe materiały
Krótko: W JavaScript/TypeScript każdy obiekt/wyrażenie może być ocenione w kontekście logicznym jako truthy (traktowane jak prawda) lub falsy (traktowane jak fałsz).
Falsy to: false, 0, -0, 0n (BigInt), '' (pusty string), null, undefined, NaN.
Wszystko inne jest truthy (np. {}, [], '0', ' ', new Boolean(false)).
Najważniejsze tematy w tej lekcji:
- Lista wartości falsy i przykłady truthy.
- Konwersja do boolean:
Boolean(x)i podwójna negacja!!x. - Różnice między
||(falsy) a??(nullish:null/undefined). - Bezpieczne warunki: jawne porównania (
===), sprawdzanie długości (arr.length > 0), opcjonalne łańcuchy (?.). - Typowe pułapki:
0,''iNaNjako falsy; obiekty zawsze truthy (nawet{},[]inew Boolean(false)).
// ✅ Quick boolean demo
const values = [false, 0, -0, 0n, '', null, undefined, NaN, '0', ' ', [], {}, new Boolean(false)];
const truthTable = values.map(v => ({ value: String(v), isTruthy: !!v }));
console.log(truthTable);
// Note: {}, [], '0', ' ' and new Boolean(false) are truthy
// ❌ Ambiguous: treats 0 as false
if (itemsCount) {
ship();
}
// ✅ Explicit intent
if (itemsCount > 0) {
ship();
}
// ❌ Ambiguous: empty string rejected
if (form.email) {
submit();
}
// ✅ Explicit: non-empty after trim
if (typeof form.email === 'string' && form.email.trim() !== '') {
submit();
}
Linki zewnętrzne
Zadania
Przygotowaliśmy dla Ciebie kilka zadań-zagadek, które pozwolą Ci utrwalić wiedzę 😉
Zadanie 1
Treść zadania: Co wypisze konsola?
console.log(Boolean(''), Boolean('hello'));
Zadanie 2
Treść zadania: Co trafi do konsoli?
if (0) {
console.log('A');
} else {
console.log('B');
}
Zadanie 3
Treść zadania: Co wypisze konsola?
if ('0') {
console.log('YES');
} else {
console.log('NO');
}
Zadanie 4
Treść zadania: Jakie linie się wypiszą?
const name = ' ';
if (name) {
console.log('HAS_VALUE');
}
if (name.trim() !== '') {
console.log('NON_EMPTY');
} else {
console.log('EMPTY_AFTER_TRIM');
}
Zadanie 5
Treść zadania: Co wypisze poniższy kod?
const inputCount = 0; const countA = inputCount || 10; // uses falsy logic const countB = inputCount ?? 10; // uses nullish logic console.log(countA, countB);

Podjęta jest kwestia podwójnej negacji, że jest ważna – ale nie jest wyjaśnione co robi…
Hej,
Słuszna uwaga! Dodałem ten temat jako suplement do
3-logic.ts🙂Idealne do porannej kawy, Q4 podchwytliwe jak z istqb 🙂 5/5 ale i kawa druga:)
truthy i falsy bywają podchwytliwe 😀
Dlatego czasem dla lepszej czytelności lepiej używać konkretnych porównań (z
!==) 😉