代码之家  ›  专栏  ›  技术社区  ›  Keith Bentrup

何时使用双不(!!)javascript中的运算符

  •  30
  • Keith Bentrup  · 技术社区  · 15 年前

    我理解 what the double not operator does in JavaScript . 我很好奇它的用途,以及我最近的一个断言是否正确。

    我说过了 if (!!someVar) 没有意义也没有意义 (!!someVar && ... 因为这两个 if 以及 && 将导致somevar被评估为布尔值,所以!!是多余的。

    事实上,我唯一能想到的合法使用double not运算符的时间是,如果您想与另一个布尔值进行严格的比较(因此,可能是在返回值中显式地期望true或false)。

    这是正确的吗?当我注意到jquery 1.3.2使用了这两种方法时,我开始怀疑自己。 如果(!)萨默瓦尔) return !!someVar && ...

    在这种情况下,double是否没有任何实际效果?

    我个人认为这只会导致混乱。如果我看到一个if语句,我知道它正在将其作为布尔值进行计算。

    2 回复  |  直到 9 年前
        1
  •  38
  •   Christian C. Salvadó    15 年前

    if statements 我和你在一起,这是完全安全的,因为在内部, ToBoolean 将对条件表达式执行操作( 见规范第3步 )

    但是,如果您想从函数返回一个布尔值,您应该确保结果实际上是布尔值,例如:

    function isFoo () {
      return 0 && true;
    }
    
    console.log(isFoo()); // will show zero
    typeof isFoo() == "number";
    

    总之, Boolean Logical Operators 无法返回操作数 而不是 Boolean 结果必然:

    逻辑与运算符( && )将返回 第二操作数 如果第一个是 真正地 :

    true && "foo"; // "foo"
    

    它将返回 第一个操作数 如果它本身 法西 :

    NaN && "anything"; // NaN
    0 && "anything"; // 0
    

    另一方面,逻辑或运算符( || )将返回 第二操作数 ,如果第一个是 法西 以下内容:

    false || "bar"; // "bar"
    

    它将返回 第一个操作数 如果它本身就没有问题:

    "foo" || "anything"; // "foo"
    

    也许值得一提的是 法西 价值观是: null , undefined ,请 NaN , 0 ,零长度字符串,当然 false .

    还有别的吗 法西 A 布尔 对象或 布尔 值),评估 boolean context 会回来 true .

        2
  •  0
  •   SF.    15 年前

    是的!!var用于需要0_1返回值的情况。

    一个是对bool值的简单比较,当您希望“a==b”等于“a xor not b”时,除了a=5和b=7都是真的,但不等于。

    另一种是当您想要将一组条件强制为变量的位时:

     var BIT_NONEMPTY=1;
     var BIT_HASERRORS=2;
     var BIT_HASCHILDREN=4;
     var BIT_HASCONTENT=8;
    
     result_bitfields = 
        (!!countLines())*BIT_NOTEMPTY +
        (!!errorCode())*BIT_HASERRORS +
        (!!firstChild())*BIT_HASCHILDREN +
        (!!getContent())*BIT_HASCONTENT;
    

    在Javascript中不是很有用,它离位值非常远,但有时可能有用。