Подтвердить что ты не робот

JavaScript: пустой массив, [] оценивается как true в условных структурах. Почему это?

Я столкнулся с множеством ошибок в моем коде, потому что ожидал этого выражения:

Boolean([]);, чтобы оценить значение false.

Но это было не так, поскольку оно оценивалось как true.

Следовательно, функции, которые возможно возвращают [] следующим образом:

// Where myCollection possibly returned [ obj1, obj2, obj3] or []
if(myCollection)
{
  // ...

}else
{
  // ...
}

не ожидал.

Я ошибаюсь, полагая, что [] пустой массив?

Кроме того, совместимо ли это поведение во всех браузерах? Или там тоже есть? Кстати, я заметил это поведение в Goolgle Chrome.

4b9b3361

Ответ 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)