使用“!!”不是多余的吗?在 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 是多余的吗?