【问题标题】:myVar = !!someOtherVar [duplicate]myVar = !!someOtherVar [重复]
【发布时间】:2011-04-15 21:53:43
【问题描述】:

我可以澄清一下我为什么要使用它吗?

myVar = !!someOtherVar;

【问题讨论】:

    标签: javascript variables


    【解决方案1】:

    在非严格类型语言中,!运算符将值转换为布尔值。做两次就等于说

    myVar = (boolean)someOtherVar
    

    请注意,为了代码清晰,不建议这样做。

    【讨论】:

    • ...还是不推荐?
    • @STW: youtube.com/watch?v=0QOya9-lwQk(见 1:44 和 8:38)
    • 你可以使用Boolean(someOtherVar)在JS中输入cast
    • @BoltClock -- 第一分钟,我正在闪回南方公园,巴特斯在那里变成了皮条客;你知道我在说什么吗?
    • @MooGoo -- 感谢我的“我怎么不知道它存在?”一天中的时刻
    【解决方案2】:

    (重写以澄清、简化)

    该语句执行几个不同的操作:

    myVar = // This portion is a regular assignment, it will store the value of the suffix
            !!someOtherVar; // This portion is evaluated to a boolean result
    

    我认为!!someOtherVar 是您真正要问的。答案很简单:它对someOtherVartruthiness(一种Javascript 主义)执行两个逻辑NOT 操作。

    换句话说,如果您了解! 运算符,这只是将其中两个组合在一起(!! 不是不同的运算符)。通过这样做,它实质上返回了 someOtherVar 的布尔评估——换句话说,它是从 someOtherVarboolean 的任何类型的转换。

    所以...走一遍,注意myVar的结果:

    myVar = someOtherVar; // myVar will be whatever type someOtherVar is
    myVar = !someOtherVar; // myVar will *always be boolean, but the inverse of someOtherVar's truthiness
    myVar = !!someOtherVar; // myVar will *always be boolean, and be the equivalent of someOtherVar's truthiness
    

    【讨论】:

      【解决方案3】:

      如果您需要将布尔值传递给函数,或者想在条件语句中只计算布尔值,则可以通过双重否定将 someOtherVar 转换为布尔值。

      【讨论】:

        【解决方案4】:

        这是一个双重否定,但它也适用于类型转换。 !somevar 将返回一个布尔值(根据Crockford's lectures,如果 somevar 为“真”,则为真,如果为“假”,则为假)。因此,!!somevar 将是 not(bool),因此它将是布尔值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多