Zmienne prawdziwe i nieprawdziwe (truthy i falsy)

TIP: Cały kod do poszczególnych lekcji, dodatkową teorię i linki z tej i innych lekcji - znajdziesz w darmowym repozytorium - https://github.com/jaktestowac/typescript-dla-testera Chcesz dokładniej poznać TypeScript? Sprawdź nasz Program JavaScript i TypeScript dla Testerów

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, '' i NaN jako falsy; obiekty zawsze truthy (nawet {}, [] i new Boolean(false)).
TIP: Szybkie sprawdzenie, co jest falsy lub truthy.

// ✅ 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
  
TIP: Pisz jawnie warunki, gdy operujesz na zmiennych które mogą przyjąć wartości 0 lub ”.

// ❌ 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'));
Rozwiązanie i analiza
Pusty string jest falsy, a niepusty string jest truthy.

Odpowiedź: false true

Zadanie 2

Treść zadania: Co trafi do konsoli?

if (0) {
  console.log('A');
} else {
  console.log('B');
}
Rozwiązanie i analiza
Wartość 0 jest falsy, więc wykona się gałąź else.

Odpowiedź: B

Zadanie 3

Treść zadania: Co wypisze konsola?

if ('0') {
  console.log('YES');
} else {
  console.log('NO');
}
Rozwiązanie i analiza
String '0' jest niepusty, więc jest truthy.

Odpowiedź: YES

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');
}
Rozwiązanie i analiza
String ze spacją jest truthy, ale po trim() staje się pusty, czyli falsy.

Odpowiedź: HAS_VALUE oraz 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);
Rozwiązanie i analiza
Operator || potraktuje 0 jako falsy i wybierze 10.
Operator ?? reaguje tylko na null/undefined, więc zachowa 0.

Odpowiedź: 10 0

4 komentarze

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *