有什么区别if("test")
和if(!!"test")
,只判断为假或真;
答案 0 :(得分:6)
问题有一个double negation expressson,它将类型转换为布尔值。
e.g。
var x = "test";
x === true; // evaluates to false
var x = !!"test";
x === true; //evalutes to true
答案 1 :(得分:6)
!!会将“truthy”值转换为true,将“falsy”值转换为false。
“Falsy”值如下:
false
0
(零)""
(空字符串)null
undefined
NaN
如果变量x
包含其中任何一项,则!!x
将返回false
。否则,!!x
将返回true
。
在实践方面,执行if(x)
和执行if(!!x)
之间没有区别,至少在javascript中没有区别:在相同的情况下,两者都会进入/退出。
编辑:有关详细信息,请参阅http://www.sitepoint.com/blogs/2009/07/01/javascript-truthy-falsy/
答案 2 :(得分:1)
!!将转换类型转换为布尔值,您只需将其放入if,它就是AFAIK,毫无意义。
答案 3 :(得分:1)
没有功能差异。正如其他人指出的那样,
!!"test"
将字符串转换为布尔值。
这样想:
!(!("test"))
首先,"test"
被评估为字符串。然后评估!"test"
。由于!
是否定运算符,它会将您的字符串转换为布尔值。在许多脚本语言中,非空字符串被评估为true,因此!
将其更改为false。然后评估!(!"test")
,将false更改为true。
但是在if条件中通常不需要!!
,就像我提到的那样,在检查布尔值之前它已经为你进行了转换。也就是说,这两行:
if ("test")
if (!!"test")
功能相同。