在其他人的代码中,我发现了这种方法来测试变量的存在:
if(!!variable) {
//Do something
} else {
//Something else
}
是否有理由使用if(!!variable)
代替if(variable)
进行测试?这是一个好习惯吗?
答案 0 :(得分:6)
是否有理由使用
if(!!variable)
代替if(variable)
进行测试?
没有
使用if()
无论如何都会将条件强制转换为布尔值,无需手动执行。当你想要保证在其他地方有一个布尔值时,使用这种语法是有意义的,例如,如果你想记录表达式的真实性:
console.log(!!variable)
这将确保您记录true
或false
,而不是变量的原始值。但在if
内?没有区别。
答案 1 :(得分:0)
不,在if的情况下,他们通常没有理由在JS中写这个。
我不会称之为不好的做法,因为它通常来自强类型语言的程序员,并且是用语言转换为bool的常用快速方法。
它也可以用来强调价值的真实性的重要性,并且表明程序员不会忘记把这个条件。
TL:DR:至于很多事情:这可能不是一个好习惯,但只有你的团队不习惯那种练习,无论是训练,记录还是离开它,它都会成为不好的做法。答案 2 :(得分:-2)
双重否定是将变量转换为bool的一种hacky方式(恕我直言)。在变量上使用!
将其强制转换为bool并取消它,并再次使用它将其转换回“正确”值。所以!!0 === false
正如詹姆斯所说,没有理由在if语句中这样做。真正做到这一点的唯一原因是强制使用bool进行日志记录或类似操作,因此记录的值为true
或false
而不是0
,空字符串等
答案 3 :(得分:-3)
Double !
(!!
)不是运营商。只是 !两次 - 双重否定。