【问题标题】:What is the difference between !!variable and variable [duplicate]!!变量和变量有什​​么区别[重复]
【发布时间】:2015-05-19 06:42:37
【问题描述】:

我看到一些开发人员以对我来说没有意义的方式使用变量,这是我在 AngularJS 中更常见的情况。

考虑这段代码:

var someVariable = (someOtherVariable === 'true');
if (!!someVariable) {
     // do some stuff here
}

为什么不把那两个感叹号去掉呢?不一样吗?这样做有什么好处?

【问题讨论】:

  • 是的,在这种情况下是一样的。而且由于someVariable 保证是布尔值,因此将其“强制转换”为布尔值就更没有意义了。这里根本没有任何好处。
  • !!someVariablesomeVariable 相同。 !! 就像双重否定。

标签: javascript angularjs


【解决方案1】:

!! 是双非运算符。它将操作数强制为Boolean

就条件语句而言,if (!!someVariable) { } 等价于if (someVariable) { },因为如果值为真,则条件将得到满足,因为存在自动布尔强制。

【讨论】:

  • 我认为 OP 知道这一点。问题的另一部分是有什么区别以及这里是否有任何好处。
  • 没有可读性优势,这是肯定的。
【解决方案2】:

双非运算符!! 将(可能是非布尔值)值强制转换为布尔值。

在您的具体示例中:

var someVariable = (someOtherVariable === 'true');
if (!!someVariable) {
     // do some stuff here
}

someVariable 已经保证是一个布尔值(因为=== 比较的结果始终是一个布尔值),所以将其强制为布尔值不会以任何方式改变操作,而且几乎是浪费代码。即使它还不是布尔值,您也不需要将它强制转换为布尔值来像if (someVariable) 一样测试它,所以这里还有另一个不使用!! 的理由。

!! 有用的时候是当你想在某个地方存储一个真正的布尔值,但你可能只有一个真值或假值,不一定是一个真正的布尔值。然后您可以使用 !! 将其强制转换为布尔值。


因此,假设您有一些不一定是布尔值的值,并且您想根据第一个变量的真实性或虚假性将其他值设置为真正的布尔值。你可以这样做:

var myVar;
if (someVar) {
    myVar = true;
} else {
    myVar = false;
}

或者这个:

myVar = someVar ? true : false; 

或者这个:

myVar = !!someVar;

【讨论】:

  • 是的。 if 语句自动将条件值强制为布尔值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 2011-01-14
  • 2016-06-13
  • 2018-04-23
  • 1970-01-01
  • 2013-03-12
相关资源
最近更新 更多