【问题标题】:Is there any difference between variable usage and double exclamation in an if? [duplicate]if中的变量用法和双感叹号之间有什么区别吗? [复制]
【发布时间】:2016-08-07 13:46:37
【问题描述】:

假设我有一个变量condition。如果我想将它作为严格的boolean 值存储到变量中,那么我会这样做:

var logicalCondition = !!condition;

第一个感叹号否定condition 并将值转换为boolean。第二个感叹号否定了否定的严格布尔值。如果condition 为真,则结果为true,如果condition 为假,则结果为false。已知If 条件将 truey 转换为 true 并将 falsy 转换为 false。所以,如果我们看一下以下两个块

//first
if (condition) {
    //do something
}

//second
if (!!condition) {
    //do something
}

我们可以观察到的第一个区别是,在第二种情况下,我们将值转换为严格的boolean 值,然后再将其交给if。是否有第二个区别,或者这种转换是不必要的?

【问题讨论】:

  • 没有区别。 !! 是到布尔值的隐式转换,但 if(condition) 也采用真值/假值,并且无论哪种方式都一样
  • 没有必要。 if 条件测试的行为与!! 的结果完全相同。
  • 可能会减少 linter 的抱怨吗?像自动类型检测,它不是布尔值。
  • 我只想指出,虽然if(!!condition) 是多余的,但它可以指导下一个查看代码的人condition 实际上不是布尔值。因此,它具有一定的维护价值,即使性能没有差异。

标签: javascript


【解决方案1】:

还有第二个区别吗...?

不,在 JavaScript 引擎级别没有。正如您所说,if(以及其他任何需要布尔值的地方)完成的测试将与!! 正在做的事情相同(实际上)。所以你的第一个区别(额外的工作)是唯一的区别。

【讨论】:

  • 感谢您的回答,在提问之前证实了我的观点。
  • @LajosArpad:是的,我们可以说出来。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
  • 1970-01-01
  • 2019-02-13
  • 1970-01-01
  • 2016-09-05
  • 2018-05-22
  • 1970-01-01
相关资源
最近更新 更多