使用“!!”不是多余的吗?在 if 语句中,因为 if 语句已经检查了真假?

Posted

技术标签:

【中文标题】使用“!!”不是多余的吗?在 if 语句中,因为 if 语句已经检查了真假?【英文标题】:Isn't it redundant to use "!!" in an if statement since if statments already check for truthy? 【发布时间】:2021-12-05 21:56:11 【问题描述】:

据我了解,!! 是确保值是 Boolean 类型的首选方式。所以在很多情况下!! 都适合使用。但是,在 if 语句中,由于 if 语句已经检查了真值,因此在值上使用 !! 不是多余的吗?

var user = 'username123'

if (!!user) 
  // arbitrary code

所以,我知道我在这里使用了一个字符串,但变量的类型并不重要,因为我假设使用 !! 的全部目的是确保 布尔 类型。换句话说,!!user 只是Boolean(user) 的另一种方式。在仔细阅读了 If..else 的 MDN 文档之后,if 声明似乎已经做到了这一点。那么为什么在if 语句中需要!! 呢?还是我错了,!! 实际上将值转换为布尔类型比if 语句所做的类型强制更准确或不同?或者这是我基本正确但转换会导致不同布尔值的例外情况之一?

【问题讨论】:

是的,它是多余的。 这只是忍者代码,添加了 2 个字符而不是 9 ;多用于三元运算符,没有魔鬼 只要您不明确需要布尔值,它就是多余的,因此请单独检查真实性。但是,如果没有明确强制,有些比较会产生意想不到的结果,即([] == false) // -> true(!![] == false) //-> false 【参考方案1】:

是的,它是多余的。 if 语句条件始终强制转换为布尔值。三元运算符也是如此。

【讨论】:

好吧,我是这么认为的。谢谢。我还有一个相关的问题。如果您使用像user ? true : false 这样的三元运算符,那也会达到与!!user 相同的结果。我想我的问题是三元 ? 运算符是否也确保布尔类型? @privacyisimportant 是的,确实如此。

以上是关于使用“!!”不是多余的吗?在 if 语句中,因为 if 语句已经检查了真假?的主要内容,如果未能解决你的问题,请参考以下文章

在 Objective-C 中使用 ARC 时 AutoRelease 是多余的吗?

Javascript;这种“hasOwnProperty”的使用是多余的吗? [复制]

为啥使用预处理器#if 语句而不是 if() else?

在 Java 的方法中抛出特定的异常是多余的吗?

为啥在 if 语句中使用双感叹号?

判断语句:if 的格式