Encontré muchos errores en mi código porque esperaba esta expresión:
Boolean([]);
evaluar como falso.
Pero este no fue el caso, ya que se evaluó como verdadero.
Por lo tanto, funciones que posiblemente regresaron []
así:
// Where myCollection possibly returned [ obj1, obj2, obj3] or []
if(myCollection)
{
// ...
}else
{
// ...
}
no hizo las cosas esperadas.
¿Me equivoco al asumir que es []
una matriz vacía?
Además, ¿este comportamiento es coherente en todos los navegadores? ¿O también hay trampas? Por cierto, observé este comportamiento en Goolgle Chrome.
javascript
arrays
object
conditional
racl101
fuente
fuente
myCollection.length > 0
?myCollection
resulta sernull
oundefined
. Necesitas usarif(myCollection && myCollection.length > 0)
.myCollection.length > 0
ofrece un valor booleano que está haciendo lo que pidió el OP ... todavía necesita hacer el trabajo desde allí.Respuestas:
De http://www.sitepoint.com/javascript-truthy-falsy/
Los siguientes valores son siempre falsos:
Todos los demás valores son verdaderos, incluidos "0" (cero entre comillas), "falso" (falso entre comillas), funciones vacías, matrices vacías y objetos vacíos.
Con respecto a por qué esto es así, sospecho que se debe a que las matrices de JavaScript son solo un tipo particular de objeto. El tratamiento especial de las matrices requeriría una sobrecarga adicional para probar
Array.isArray()
. Además, probablemente sería confuso si las matrices verdaderas se comportaran de manera diferente a otros objetos similares a matrices en este contexto, mientras que hacer que todos los objetos similares a matrices se comporten de la misma manera sería aún más caro.fuente
[] == false
se evalúatrue
.==
comparador en el enlace que publicó. Comenté solo para tener cuidado al esperar una evaluación verdadera o falsa.Debería verificar el
.length
de esa matriz para ver si contiene algún elemento.if (myCollection) // always true if (myCollection.length) // always true when array has elements if (myCollection.length === 0) // same as is_empty(myCollection)
fuente