为什么“if(!! variable)”而不是“if(variable)”?

时间:2016-06-30 09:19:24

标签: javascript

在其他人的代码中,我发现了这种方法来测试变量的存在:

if(!!variable) {
  //Do something
} else {
  //Something else
}

是否有理由使用if(!!variable)代替if(variable)进行测试?这是一个好习惯吗?

4 个答案:

答案 0 :(得分:6)

  

是否有理由使用if(!!variable)代替if(variable)进行测试?

没有

使用if()无论如何都会将条件强制转换为布尔值,无需手动执行。当你想要保证在其他地方有一个布尔值时,使用这种语法是有意义的,例如,如果你想记录表达式的真实性:

console.log(!!variable)

这将确保您记录truefalse,而不是变量的原始值。但在if内?没有区别。

答案 1 :(得分:0)

不,在if的情况下,他们通常没有理由在JS中写这个。

我不会称之为不好的做法,因为它通常来自强类型语言的程序员,并且是用语言转换为bool的常用快速方法。

它也可以用来强调价值的真实性的重要性,并且表明程序员不会忘记把这个条件。

TL:DR:至于很多事情:这可能不是一个好习惯,但只有你的团队不习惯那种练习,无论是训练,记录还是离开它,它都会成为不好的做法。

答案 2 :(得分:-2)

双重否定是将变量转换为bool的一种hacky方式(恕我直言)。在变量上使用!将其强制转换为bool并取消它,并再次使用它将其转换回“正确”值。所以!!0 === false

正如詹姆斯所说,没有理由在if语句中这样做。真正做到这一点的唯一原因是强制使用bool进行日志记录或类似操作,因此记录的值为truefalse而不是0,空字符串等

答案 3 :(得分:-3)

Double !!!)不是运营商。只是 !两次 - 双重否定