今天在看资料的时候,看到这样的表达式
alert(!!"blue"); //true
alert(!!0); //false
alert(!!NaN); //false
alert(!!""); //false
alert(!!12345); //true
两个!!,这样的写法有什么意义呢?
来看看书上的怎么写的
同时使用两个逻辑非操作符,实际上就会模拟
Boolean()
转型函数的行为.其中,第一个逻辑非操作会基于无论什么操作数返回一个布尔值,而第二个逻辑非操作则对该布尔值求反,于是就得到了这个值真正对应的布尔值.
原来如此,就是相当于Boolean()的作用.
但是!!
还有另外的一种作用,就是能力检测.
function foo(obj){
if(!!obj.bar){
console.log('has bar');
}
}
上面的例子,如果obj.bar
的值是null,undefined,''
中的一个程序都不会进入if
语句中.这样就可以方便的检测bar
是否存在.
能力检测不适用于检测[]和{}
网友评论