文章加密

;

2019年7月25日 星期四

之所以在boolean時要加兩個!!

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

在看大侠们写的JS code中一直会发现有!!(condation)中,一向以来比较迷惑,不知道为什么这样写。因为双非(!!)之后,和以前所得到的值并没有区别,那我们为什么要多些一举,做这件事情呢?
谈到这个问题,我们首先应该从根上说起,因为JS是一门弱类型语言,所以在一些情况下,我们得到的值并不一定是boolean值(例如下面範例得到了字串,實際上我們希望得到的是true,因為拿字串去判斷結果是true),虽然在大数情况下,这是正确的,但是如果我们在一些严格的场景下我们有可能会得到错误的结果,如下例:
复制代码
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

沒有留言:

張貼留言