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

新手上路,请多包涵

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

Boolean([]); 评估为假。

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

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

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

}else
{
  // ...
}

没有做预期的事情。

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

另外,这种行为在所有浏览器中是否一致?或者那里也有陷阱吗?顺便说一下,我在 Goolgle Chrome 中观察到了这种行为。

原文由 racl101 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 302
2 个回答

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

以下值始终为假值:

  • 错误的
  • 0(零)
  • 0n(BigInt 零)
  • ”“(空字符串)
  • 无效的
  • 不明确的
  • NaN (一个特殊的数字值,意思是非数字!)

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

至于 为什么 会这样,我怀疑是因为 JavaScript 数组只是一种特殊类型的对象。特殊处理数组需要额外的开销来测试 Array.isArray() 。此外,如果真正的数组在这种情况下与其他类数组对象的行为不同,可能会造成混淆,而让所有类数组对象的行为相同将更加昂贵。

原文由 Barmar 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

原文由 DevlshOne 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题