【问题标题】:What is the difference if("test") and if(!!"test")if("test") 和 if(!!"test") 有什么区别
【发布时间】:2011-03-25 04:43:04
【问题描述】:

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

【问题讨论】:

  • 我好像看到过这样的问题,但是记不住题目了
  • 你的问题与正文不同
  • @tm1rbrt:我修好了,第一个编辑错了。
  • 我相信 OP 知道 !!x 做了什么,但问题是这两个语句在行为上是否相同。

标签: javascript


【解决方案1】:

没有功能上的区别。正如其他人指出的那样,

!!"test"

将字符串转换为布尔值。

这样想:

!(!("test"))

首先,"test" 被评估为一个字符串。然后评估!"test"。由于! 是否定运算符,它将您的字符串转换为布尔值。在许多脚本语言中,非空字符串被评估为真,因此! 将其更改为假。然后 !(!"test") 被评估,将 false 更改为 true。

!! 在 if 条件中通常不是必需的,就像我提到的那样,它在检查布尔值之前已经为您进行了转换。也就是说,这两行:

if ("test")
if (!!"test")

在功能上是等效的。

【讨论】:

  • 感谢您的回答,if(!! "var") 广泛使用,在 Ext lib 中;我认为 if("var") 等于 if(!! "var");
【解决方案2】:

!!确实将类型转换为布尔值,您只是将其放入 if 中,这是 AFAIK,毫无意义。

【讨论】:

    【解决方案3】:

    !!会将“真”值转换为真,将“假”值转换为假。

    “假”值如下:

    • false
    • 0(零)
    • ""(空字符串)
    • null
    • undefined
    • NaN

    如果变量x 包含其中任何一个,则!!x 将返回false。否则,!!x 将返回 true

    在实际方面,if(x)if(!!x) 之间没有区别,至少在 javascript 中没有:两者都会在相同的情况下进入/退出 if。

    编辑:请参阅http://www.sitepoint.com/blogs/2009/07/01/javascript-truthy-falsy/ 了解更多信息

    【讨论】:

      【解决方案4】:

      问题有一个double negation 表达式,它将类型转换为布尔值。

      例如

      var x = "test";
      
      x === true; // evaluates to false
      
      var x = !!"test";
      
      x === true; //evalutes to true
      

      【讨论】:

        猜你喜欢
        • 2012-02-21
        • 1970-01-01
        • 2022-11-06
        • 1970-01-01
        • 1970-01-01
        • 2020-07-21
        • 2013-11-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多