【问题标题】:What is the difference between if(!!condition) and if(condition)if(!!condition) 和 if(condition) 有什么区别
【发布时间】:2013-11-18 01:45:35
【问题描述】:

我经常看到代码使用!!condition 而不仅仅是常规条件。即:

if(!!value){
    doSomething();
}

对比:

if(value){
    doSomething();
}

如果有的话,功能上的区别是什么?一种优于另一种吗?如果有的话,选择使用一种与另一种的条件是什么?

【问题讨论】:

标签: javascript


【解决方案1】:

这只是一种更明确的方式来测试一个值的“真实性”。

以下内容会将value“转换”为布尔值。

!!(value)

例如,一个非空字符串

!!"a" // true

另一个空字符串的例子

!!"" // false

但是,如果您只是直接使用测试值

if (value) // ...

那么下面的值是 JavaScript 中的false

  • 0
  • -0
  • null
  • ""(空字符串)
  • false
  • undefined
  • NaN

其他所有内容都是true

【讨论】:

  • 在if条件下使用时可能没有意义,但作为返回值使用时,可用于发送布尔值。我认为这应该是公认的答案。
【解决方案2】:

技术上没什么。 double bang !! 类型将 value 转换为布尔值 - if 语句在评估 value 时所做的事情。

在您发布的代码中,!! 是无用的,毫无用处。

【讨论】:

    【解决方案3】:

    !!确保结果类型是布尔值(true 或 false)。

    javascript:alert("foo") --> foo

    javascript:alert(!"foo") --> 错误

    javascript:alert(!!"foo") --> true

    javascript:alert(!!null) --> 错误

    他们这样做是为了确保 $('row') 不为空。

    键入比 $('row') 更短!= null ?真:假。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-25
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      相关资源
      最近更新 更多