在JS中,为什么要用!!来得到一个bool型变量

在看大侠们写的JS code中一直会发现有!!(condation)中,一向以来比较迷惑,不知道为什么这样写。因为双非(!!)之后,和以前所得到的值并没有区别,那我们为什么要多些一举,做这件事情呢?

谈到这个问题,我们首先应该从根上说起,因为JS是一门弱类型语言,所以在一些情况下,我们得到的值并不一定是boolean值,虽然在大数情况下,这是正确的,但是如果我们在一些严格的场景下我们有可能会得到错误的结果,如下例:

var isFoo=function(){

  return true&&"result";

}

console.log(isFoo());// 结果将是"result"

typeof isFoo()=="string";//不是我们期待的"boolean "

if(isFoo()){

  //code is here will be executed.

}

因为在JS中,解析器会把除false, 0, null, undefind,NaN以外的值都当成true,所以在当一些严格的场景中,需要使用!!来取得真正的bool值。 

最后让我们来看一下&&运算符是如何返回值的:&&将会返回第二个比较结果,在第一个结果是真的情况下,让我们来看下例:

True&&"foo";//"foo"

NaN&& "anything";  //NaN

0&&"anything";// 0

posted @ 2012-08-09 11:19  moonreplace  阅读(848)  评论(0编辑  收藏  举报