Przejdź do głównej zawartości

Żaden z trzech początkowych przykładów nie będzie się do nadawał do sprawdzenia, czy tablica jest pusta.

Po pierwsze, pusta tablica nie jest wartością fałszywą według listy wartości fałszywych w JavaScript, więc if ([]) odpada.

Po drugie, luźne porównanie == tablicy z wartością false jest najbliższe spełnieniu zadania, ale nie daje 100% pewności.

Po trzecie, ścisłe porównanie === odpada, bo porównywane typy danych [] i false się od siebie różnią.

W przypadku luźnego porównania tablicy z wartością logiczną, == sprowadzi najpierw wartości do jednego typu, którym będzie wartość liczbowa (tak działa algorytm tego operatora).

[] == false zamieni się na Number([]) === Number(false). Typy porównywanych danych się zgadzają, więc luźne porównanie zastosuje już algorytm porównania ścisłego.

Wartość liczbowa z pustej tablicy zostanie skonwertowana do wartości 0. Wartość liczbowa z wartości false da również 0.

Mamy zwycięzcę... prawie. Bo co jeśli zamiast pustej tablicy, pojawi się np. [0], albo ["0"]?

Funkcja Number() sprowadzi taką tablicę również do wartości 0. 🤯

Nie możemy więc polegać na porównaniu [] == false, jeśli zależy nam na wykonaniu instrukcji warunkowej tylko w przypadku gdy tablica jest pusta.

Rozsądną opcją może być użycie własności length na obiekcie tablicy. Zwrócona zostanie wtedy wartość liczbowa wskazująca na ilość elementów znajdujących się w tablicy.

Jeśli zwróconą wartością będzie wartość 0, to mamy wtedy pewność, że tablica nie zawiera żadnych elementów (jest pusta).