如果(“测试”)和if(!!“test”)有什么区别

时间:2010-08-04 10:36:43

标签: javascript

有什么区别if("test")if(!!"test"),只判断为假或真;

4 个答案:

答案 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")

功能相同。