为什么空的 JavaScript 数组在条件结构中计算为 true?

我在代码中遇到了很多错误,因为我期望这个表达式:

Boolean([]);以评估为假。

但事实并非如此,因为它评估为真。

因此,可能返回如下的函数:[]

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

}else
{
  // ...
}

没有做预期的事情。

我是否错误地假设这是一个空数组?[]

另外,此行为在所有浏览器中是否一致?还是那里也有什么陷阱?顺便说一句,我在Goolgle Chrome中观察到了这种行为。


答案 1

http://www.sitepoint.com/javascript-truthy-falsy/

以下值始终是伪造的:

  • 0(零)
  • “”(空字符串)
  • 定义
  • NaN(一个特殊的数字值,意思是非数字!

所有其他值都是真实的,包括(引号中的零),(引号中的假),空函数,空数组()和空对象()。"0""false"[]{}

关于为什么会这样,我怀疑这是因为JavaScript数组只是一种特定类型的对象。专门处理数组需要额外的开销来测试 。此外,如果在此上下文中,真数组的行为与其他类似数组的对象不同,则可能会令人困惑,而使所有类似数组的对象的行为相同将更加昂贵。Array.isArray()


答案 2

您应该检查该数组的,以查看它是否包含任何元素。.length

if (myCollection) // always true
if (myCollection.length) // always true when array has elements
if (myCollection.length === 0) // same as is_empty(myCollection)