【问题标题】:Testing for an empty array测试空数组
【发布时间】:2015-05-28 21:33:41
【问题描述】:

使用以下语句之一检查空数组有什么优势吗?

if (arr.length) {}

if (arr.length > 0) {}

我假设它们是相同的,但我没有在网上看到第一个示例的任何示例。

【问题讨论】:

  • 它们实际上是相同的,顶部的原因是因为 if 语句将使用 1 和 0 将它们视为真假
  • 一个更短。就是这样。
  • 我同意。他们是一样的!可能想添加一些关于可读性的东西。第二个更容易阅读...
  • 性能是否存在差异(无论它可能有多小)?
  • 它们是一样的。看起来第一个在说Does my array have a length? 而第二个Is my array's length greater than 0 是一个非常相似的问题

标签: javascript


【解决方案1】:
if(typeof arr != "undefined" && arr != null && arr.length > 0){}

我总是被告知这是检查空数组的正确方法,但我一直被它困扰。

所以,准确回答你的问题:

if(arr.length > 0){}

我被引导相信的方法是“正确的”吗,因为任何阅读代码的人都更清楚隐含的逻辑是什么。我相信这可能就是您在文档/示例/教程中看到这种方法的原因。

但至于除了语义外观和感觉之外的任何特定优势,我认为没有任何优势。

关于这个问题的更多解释:Check if array is empty or exists

(链接,因为我不想窃取他们的描述 - 他们应该得到支持)

【讨论】:

  • 这是题外话。 OP 不想知道他的变量是否已定义。在每次测试数组长度时都这样做是没有意义的。
  • @DenysSéguret - 扩展了我的答案以涵盖问题的具体细节,同时在答案中留下更多“涵盖所有领域”的检查,以帮助提供更广泛的检查并避免在没有条目的数组之间产生混淆, 和一个 null / undefined 数组,如果不是原始提问者,这可能会使该问题的其他读者受益。
【解决方案2】:

由于 arr.length 不能为负数,它们将导致相同的行为。在第一个中,整数值arr.length 将在布尔上下文中被评估为truefalse(它是"truthy"):false 如果为0,true 否则。所以它与if(arr.length != 0) 相同。 这完全取决于您认为最清晰的内容。

【讨论】:

    【解决方案3】:

    一般情况下应该是一样的,因为 0 被识别为“假”(当转换为布尔值时)。但是有一个 ">0" 会使代码更具可读性,所以我推荐使用

    if (arr.length > 0) {}
    

    在速度方面,它们应该是相同的,或者几乎相同。

    【讨论】:

      【解决方案4】:

      一个主要区别是在测试多个数组时简化代码

      if (arr.length && arr2.length && arr3.length) {}
      

      这比不断地指定 > 0 要容易得多。它的另一件事是浏览器或javascript版本是否支持速记。如果您的目标受众是浏览器过时的人,您可能希望使用完整版。

      【讨论】:

      • 它不依赖于 JavaScript 或浏览器版本;这是 JavaScript 中至少存在 18 年的“功能”(ECMAScript 1.0, 1997)。
      猜你喜欢
      • 1970-01-01
      • 2020-01-19
      • 1970-01-01
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      相关资源
      最近更新 更多