某些JavaScript示例使用!!
来检查对象是否可用
// Check to see if Web Workers are supported
if (!!window.Worker) {
// Yes, I can delegate the boring stuff!
}
为什么这只是if (window,Worker)
,而在什么情况下会失败?
答案 0 :(得分:3)
在这种情况下,它不是优选的,甚至是不同的。双重转换将其后面的变量转换为布尔值(类似于Boolean()
构造函数中的包装)。了解truthy和falsey变量的潜在问题。
但是,将变量单独放在if()
子句中会做同样的事情(它还会将if
的parens的内容解析为硬布尔值)。
在其他情况下,双重爆炸可以证明是有用的,,例如,如果您想在函数结尾处根据变量返回true
或false
感实性/ falsiness。那不是:
if(condition) {
return true;
} else {
return false;
}
你可以写一下:
return !!condition;
答案 1 :(得分:2)
不是。
当你将一个对象传递给一个函数(如jQuery的!!
)检查它的参数是否是一个布尔值,或者当函数可能隐藏它的参数从而防止它时, toggle()
很有用被收集的对象。
你引用的案例既不是那些。使用裸if
。
答案 2 :(得分:1)
在if语句的条件下,两个版本都会做同样的事情并且是一个风格选择。有些人更喜欢使用!!
来强调Worker不是布尔值,而是被转换为布尔值。