【问题标题】:Javascript Logical Operator:?Javascript逻辑运算符:?
【发布时间】:2011-09-23 21:10:05
【问题描述】:

我正在检查 underscore.js 的 src 并发现了这个:

_.isRegExp = function(obj) {
    return !!(obj && obj.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false));
};

为什么是“!!”用过的?它应该被解读为 NOT-NOT 还是这里有一些深奥的 JS 细微差别?

【问题讨论】:

  • 它被称为简写,而不是深奥的 JS 细微差别。与+ 运算符用于转换为数字(例如:+"0")和+"" 用于转换为字符串的方式相同。

标签: javascript operator-keyword


【解决方案1】:

这只是将结果转换为布尔值的一种钝方法。

【讨论】:

    【解决方案2】:

    是的,不是。将值转换为等价的布尔值是常用的习惯用法。

    JavaScript 将 0.0''nullundefinedfalse 理解为虚假,而任何其他值(显然包括 true)都是真实的。这个习语把前面的都转换成布尔值false,后面的都转换成布尔值true

    在这种特殊情况下,

    a && b
    

    如果ab 都是真实的,将返回b

    !!(a && b)
    

    如果ab 都是真实的,将返回true

    【讨论】:

    • 你忘了NaN(因为是假的)。
    【解决方案3】:

    && 运算符返回 false 或表达式中的最后一个值:

    ("a" && "b") == "b"
    

    ||运算符返回第一个计算结果为 true 的值

    ("a" || "b") == "a"
    

    !运算符返回一个布尔值

    !"a" == false
    

    因此,如果您想将变量转换为布尔值,您可以使用!!

    var myVar = "a"
    !!myVar == true
    
    myVar = undefined
    !!myVar == false
    

    等等

    【讨论】:

      【解决方案4】:

      只有两个!运营商并排。但是双重否定是没有意义的,除非你使用 !!像一个运算符来转换为布尔类型。

      它将任何东西转换为真或假...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-01
        • 2020-10-02
        • 1970-01-01
        • 1970-01-01
        • 2017-05-03
        • 1970-01-01
        相关资源
        最近更新 更多