JavaScript: пустой массив, [] оценивается как true в условных структурах. Почему это?
Я столкнулся с множеством ошибок в моем коде, потому что ожидал этого выражения:
Boolean([]);
, чтобы оценить значение false.
Но это было не так, поскольку оно оценивалось как true.
Следовательно, функции, которые возможно возвращают []
следующим образом:
// Where myCollection possibly returned [ obj1, obj2, obj3] or []
if(myCollection)
{
// ...
}else
{
// ...
}
не ожидал.
Я ошибаюсь, полагая, что []
пустой массив?
Кроме того, совместимо ли это поведение во всех браузерах? Или там тоже есть? Кстати, я заметил это поведение в Goolgle Chrome.
Ответы
Ответ 1
С http://www.sitepoint.com/javascript-truthy-falsy/
Следующие значения всегда ложны:
- ложный
- 0 (ноль)
- "" (пустой строки)
- ноль
- не определено
- NaN (специальное числовое значение, означающее не число!)
Все остальные значения являются достоверными, включая "0" (ноль в кавычках), "ложь" (ложь в кавычках), пустые функции, пустые массивы и пустые объекты.
Ответ 2
Вы должны проверить .length
этого массива, чтобы увидеть, содержит ли он какие-либо элементы.
if (myCollection) // always true
if (myCollection.length) // always true when array has elements
if (myCollection.length === 0) // same as is_empty(myCollection)