我在我的代码中遇到了很多错误,因为我期望这个表达式:
Boolean([]);
评估为假。
但事实并非如此,因为它评估为 true。
因此,可能返回 []
的函数如下所示:
// Where myCollection possibly returned [ obj1, obj2, obj3] or []
if(myCollection)
{
// ...
}else
{
// ...
}
没有做预期的事情。
我是否错误地假设 []
是一个空数组?
另外,这种行为在所有浏览器中是否一致?或者那里也有陷阱吗?顺便说一下,我在 Goolgle Chrome 中观察到了这种行为。
原文由 racl101 发布,翻译遵循 CC BY-SA 4.0 许可协议
来自 http://www.sitepoint.com/javascript-truthy-falsy/
以下值始终为假值:
所有其他值都是真实的,包括
"0"
(引号为零)、"false"
(引号为假)、空函数、空数组([]
)和空对象({}
)。至于 为什么 会这样,我怀疑是因为 JavaScript 数组只是一种特殊类型的对象。特殊处理数组需要额外的开销来测试
Array.isArray()
。此外,如果真正的数组在这种情况下与其他类数组对象的行为不同,可能会造成混淆,而让所有类数组对象的行为相同将更加昂贵。