Każda wartość ma logiczny „nastrój”
JavaScript pozwala umieścić dowolną wartość tam, gdzie oczekiwany jest boolean: w if, jako warunek while, obok && albo ||. Wtedy wartość zostaje zamieniona na true albo false. Wartości zamieniane na false nazywamy falsy. Wszystkie pozostałe są truthy.
Bez funkcji konwertującej, bez jawnego rzutowania: JavaScript robi to automatycznie. Zasady są stałe i jest ich niewiele, więc gdy znasz listę wartości falsy, cała reszta wynika z niej sama.
Pełna lista wartości falsy
Falsy jest dokładnie siedem wartości. Wszystko inne w języku jest truthy.
To wszystko. Lista:
false: sam boolean.0i-0: oba zera.0n: zero typu BigInt."": pusty string (w pojedynczych, podwójnych cudzysłowach albo backtickach, bez różnicy).null: wartość „celowo nic”.undefined: wartość „nie ustawiono”.NaN: wynik niepoprawnego działania, na przykład0 / 0.
Zapamiętaj te siedem. Potem, gdy nie masz pewności co do jakiejś wartości, zapytaj: „czy to jedna z tych siedmiu?”. Jeśli nie, jest truthy.
Niespodzianki: "0", [] i {}
Tu początkujący najczęściej się parzą. Wiele wartości wygląda na puste, a jest truthy:
Stringi są falsy tylko wtedy, gdy mają zero znaków. "0" ma jeden znak, więc jest truthy. Tablice i obiekty są zawsze truthy, nawet puste, bo JavaScript traktuje je jako obiekty, a wszystkie obiekty są truthy bez względu na zawartość.
Jeśli przychodzisz z Pythona, to największa zmiana w myśleniu. W Pythonie [] i {} są falsy. W JavaScript nie są.
Jak poprawnie sprawdzić, czy coś jest „puste”
Ponieważ [] i {} są truthy, nie możesz użyć ich bezpośrednio w if, żeby sprawdzić pustość. Pisz jawnie:
Podobnie ze stringami, jeśli string z samych spacji ma być traktowany jako pusty:
Truthy/falsy to wygodny skrót, a nie zastępstwo dla zastanowienia się, co „puste” znaczy dla twoich danych.
Zamiana na prawdziwy boolean
Czasem potrzebujesz prawdziwego true albo false, a nie tylko wartości, która jest truthy. Są na to dwa idiomy:
Boolean(x) to jawna konwersja. !!x to to samo w skrócie: pierwszy ! zamienia wartość na boolean i ją odwraca, drugi ! odwraca ją z powrotem. Oba są popularne. !! jest krótsze, Boolean() czyta się wyraźniej.
!! często zobaczysz w instrukcjach return, gdy funkcja ma zwrócić czysty boolean:
Truthy/falsy z && i ||
Operatory logiczne nie zwracają true ani false, tylko jeden z operandów. Który, zależy od tego, czy wartość jest truthy:
Dlatego value || defaultValue to tak popularny wzorzec wartości domyślnych. Ma jednak pułapkę: traktuje wszystkie wartości falsy tak samo, w tym 0 i "", które często są poprawnymi danymi:
Jeśli wartość domyślna ma działać tylko dla null albo undefined, użyj zamiast tego operatora nullish coalescing ??. Opisujemy go w osobnym dokumencie.
Ściągawka
Wydrukuj ją, przyklej do monitora i żyj dalej.
Dalej: iteratory i generatory
Skoro instrukcje warunkowe i pętle masz już opanowane, następny rozdział pokazuje, jak JavaScript pozwala wartościom powstawać na żądanie. Iteratory i generatory to mechanizm stojący za for...of, spreadem i wieloma nowoczesnymi API. To właśnie one są następne.
Najczęściej zadawane pytania
Jakie wartości są falsy w JavaScript?
Jest ich dokładnie siedem: false, 0, -0, 0n (zero BigInt), '' (pusty string), null, undefined i NaN. Wszystko inne jest truthy, w tym '0', 'false', [] i {}. Zapamiętaj krótką listę wartości falsy, a odpowiedź dla każdej innej wartości znajdziesz przez eliminację.
Czy pusta tablica jest truthy czy falsy w JavaScript?
Truthy. if ([]) { ... } wykonuje blok, co zaskakuje osoby przychodzące z Pythona albo PHP. Tablice i obiekty są obiektami, a wszystkie obiekty są truthy niezależnie od zawartości. Żeby sprawdzić, czy tablica jest pusta, użyj jawnie arr.length === 0.
Jak zamienić wartość na boolean w JavaScript?
Na dwa sposoby: Boolean(value) to forma jawna, a !!value to skrót (podwójna negacja, która konwertuje wartość i odwraca ją z powrotem). Oba działają według tych samych zasad truthy/falsy. Używaj ich, gdy potrzebujesz prawdziwego true/false, a nie tylko wyniku, który jest truthy.