【发布时间】:2011-04-15 21:53:43
【问题描述】:
我可以澄清一下我为什么要使用它吗?
myVar = !!someOtherVar;
【问题讨论】:
标签: javascript variables
我可以澄清一下我为什么要使用它吗?
myVar = !!someOtherVar;
【问题讨论】:
标签: javascript variables
在非严格类型语言中,!运算符将值转换为布尔值。做两次就等于说
myVar = (boolean)someOtherVar
请注意,为了代码清晰,不建议这样做。
【讨论】:
Boolean(someOtherVar)在JS中输入cast
(重写以澄清、简化)
该语句执行几个不同的操作:
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 是您真正要问的。答案很简单:它对someOtherVar 的truthiness(一种Javascript 主义)执行两个逻辑NOT 操作。
换句话说,如果您了解! 运算符,这只是将其中两个组合在一起(!! 不是不同的运算符)。通过这样做,它实质上返回了 someOtherVar 的布尔评估——换句话说,它是从 someOtherVar 到 boolean 的任何类型的转换。
所以...走一遍,注意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
【讨论】:
如果您需要将布尔值传递给函数,或者想在条件语句中只计算布尔值,则可以通过双重否定将 someOtherVar 转换为布尔值。
【讨论】:
这是一个双重否定,但它也适用于类型转换。 !somevar 将返回一个布尔值(根据Crockford's lectures,如果 somevar 为“真”,则为真,如果为“假”,则为假)。因此,!!somevar 将是 not(bool),因此它将是布尔值。
【讨论】: