【问题标题】:What's the purpose of str.indexOf(var && var)?str.indexOf(var && var) 的目的是什么?
【发布时间】:2019-09-03 09:29:49
【问题描述】:

我在一个库中发现我正在使用这段代码:

item[column.field].indexOf(columnFilters[columnId] && columnFilters[columnId]) === -1)

我想知道将相同的值两次传递给 indexOf 的目的是什么。或者这只是一个错误,我可以纠正它。

图书馆:https://github.com/6pac/SlickGrid/blob/master/examples/example16-row-detail.html(直播http://6pac.github.io/SlickGrid/examples/example16-row-detail.html

【问题讨论】:

  • 我可以看到 blah.indexOf(columnFilters && columnFilters[columnId]) === -1 在挖掘它的属性/索引之一之前验证 columnFilters 是否存在很有用。也许你有一个错字。
  • @James 好点
  • 是的,我是那个项目的维护者。我会删除它,它没有任何意义。这是一个示例,而不是核心代码,并且该代码没有像核心那样严格检查。
  • @BenMcIntyre 谢谢,只是想知道这是否是某种魔法;)
  • 这是开源项目的本质 :-) 代码从不同来源提交并经过不同程度的审查

标签: javascript slickgrid


【解决方案1】:

坦率地说,这几乎肯定没有任何意义。 columnFilters[columnId] && columnFilters[columnId] 实际上与 columnFilters[columnId] 相同,只是 columnFilters[columnId] 可能会被评估两次(如果它是假的)。除非columnFilters 具有名称在columnId 中的访问器属性有副作用,否则&& 在那里完全没有意义。 (如果是的话,如果结果是假的,它会导致它的副作用两次。)

&& 计算其左侧操作数,如果它是假的,则将该值作为结果;如果左侧操作数计算为真,&& 计算右侧操作数并将该值作为结果。因此,您可以看到为什么在这种情况下它毫无意义,除非它被用于访问器的副作用,在这种情况下,它只是......一个坏主意。 :-)

【讨论】:

    【解决方案2】:

    这样写一次也是一样的indexOf(columnFilters[columnId])

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 2018-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 1970-01-01
      相关资源
      最近更新 更多