Как проверить, что массив пустой
const items = [];
if (items.length === 0) {
console.log("Массив пустой");
}Массив пустойУ массива есть свойство length — число элементов. Пустой массив — тот, у которого length равен нулю. Короче то же самое: if (!items.length).
Что не работает
const empty = [];
console.log(Boolean(empty));
console.log(empty === []);
console.log(empty == false);true
false
trueif (empty)— пустой массив считается истинным значением, как любой объект. Условие выполнится и для пустого, и для заполненного массива.empty === []— всегдаfalse. Массивы сравниваются не по содержимому, а по тому, один ли это объект;[]справа — новый, другой массив. Как сравнить содержимое — в справке Как сравнить массивы.empty == false— даётtrue, но по запутанным правилам приведения типов. На такую проверку не полагайтесь.
Если там может быть не массив
Данные с сервера или из чужой функции могут прийти как null, undefined или вообще не массив. Тогда items.length упадёт с ошибкой Cannot read properties of null. Надёжная проверка:
function isEmptyList(value) {
return !Array.isArray(value) || value.length === 0;
}
console.log(isEmptyList([]));
console.log(isEmptyList([1, 2]));
console.log(isEmptyList(null));
console.log(isEmptyList(undefined));true
false
true
trueArray.isArray(value) — true, только если значение — массив. Через typeof массив не отличить: он возвращает "object" и для массива, и для null.
Короткий вариант без проверки типа — !value?.length: он даёт true для null, undefined и пустого массива. Но и для пустой строки тоже — у строк есть length.
Пустой объект и пустая строка
У объекта нет length. Пуст ли он, показывает число его ключей:
const settings = {};
console.log(Object.keys(settings).length === 0);
const text = " ";
console.log(text === "");
console.log(text.trim() === "");true
false
trueСтрока из одних пробелов — не пустая. Если пробелы не считаются (например, в поле ввода), сначала уберите их методом trim().