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