为什么!!最好检查对象是否属实?

时间:2014-07-19 08:57:09

标签: javascript

某些JavaScript示例使用!!来检查对象是否可用

// Check to see if Web Workers are supported
if (!!window.Worker) {
  // Yes, I can delegate the boring stuff!
}

为什么这只是if (window,Worker),而在什么情况下会失败?

3 个答案:

答案 0 :(得分:3)

在这种情况下,它不是优选的,甚至是不同的。双重转换将其后面的变量转换为布尔值(类似于Boolean()构造函数中的包装)。了解truthy和falsey变量的潜在问题。

但是,将变量单独放在if()子句中会做同样的事情(它还会将if的parens的内容解析为硬布尔值)。

在其他情况下,双重爆炸可以证明是有用的,,例如,如果您想在函数结尾处根据变量返回truefalse感实性/ falsiness。那不是:

if(condition) {
  return true;
} else {
  return false;
}

你可以写一下:

return !!condition; 

答案 1 :(得分:2)

不是。

当你将一个对象传递给一个函数(如jQuery的!!)检查它的参数是否是一个布尔值,或者当函数可能隐藏它的参数从而防止它时,

toggle()很有用被收集的对象。

你引用的案例既不是那些。使用裸if

答案 2 :(得分:1)

在if语句的条件下,两个版本都会做同样的事情并且是一个风格选择。有些人更喜欢使用!!来强调Worker不是布尔值,而是被转换为布尔值。