【发布时间】:2013-10-09 09:11:45
【问题描述】:
我在我的代码中遇到了很多错误,因为我期望这个表达式:
Boolean([]); 评估为假。
但事实并非如此,因为它评估为真。
因此,可能返回 [] 的函数如下:
// Where myCollection possibly returned [ obj1, obj2, obj3] or []
if(myCollection)
{
// ...
}else
{
// ...
}
没有做预期的事情。
我假设 [] 是一个空数组是不是错了?
另外,这种行为在所有浏览器中是否一致?或者那里也有任何陷阱?顺便说一下,我在 Google Chrome 中观察到了这种行为。
【问题讨论】:
-
数组是对象,对象是真实的。只需询问array.length,如果不为零,它将是真实的。显式转换为布尔值时,数组先变成空字符串,然后空字符串变成false。
-
你为什么不用
myCollection.length > 0? -
@Steve - 如果
myCollection恰好是null或undefined,这将不起作用。您需要使用if(myCollection && myCollection.length > 0)。 -
@TedHopp - 当然......我只是指出
myCollection.length > 0提供了一个布尔值,它正在执行 OP 的要求......他仍然需要从那里完成工作。
标签: javascript arrays object conditional-statements