在 JavaScript 中使用 (!!!) 运算符? [复制]
Posted
技术标签:
【中文标题】在 JavaScript 中使用 (!!!) 运算符? [复制]【英文标题】:Using the (!!!) operator in JavaScript? [duplicate] 【发布时间】:2013-11-23 11:33:53 【问题描述】:!!运算符显然很有用,因为它强制检查不是布尔值的东西作为布尔值 - 那是“真”条件。
但是假的呢?需要用!!!?
【问题讨论】:
!将一个值转换为逆布尔值(如果它是真的,它变成假,假的它变成真的)!val === !!!val
用于任何 val 值
@Simon:我从未见过====
。假设您的意思是严格比较,那么布尔运算如何与比较相反?
这个问题不是不是开玩笑吗?
@GuilhermeSehn 您应该澄清 !value 足以进行布尔转换。
【参考方案1】:
一个!
就足够了:)
!1 // false
!0 // true
【讨论】:
不,如果某些东西返回为未定义,则不会。 !!强制将 undefined 转换为 true。 @antonpug:你确定吗? jsfiddle.net/kkf7Y 单个!
似乎工作得很好,至少在我的浏览器中是这样。
***.com/questions/4686583/…
@antonpug 好的,您发布的链接仅表明我是对的。 !!永远不会在未定义时返回 true。单身的 !将任何值转换为布尔值并对其应用 NOT 操作,第二个!只会再应用一个 NOT。【参考方案2】:
!!
本身不是运算符;它只是使用 javascript 的逻辑 NOT (!
) 运算符的一种方式。
要将x
转换为布尔值,!!x
有效,因为当您将布尔值取反两次时,您会得到原始布尔值,而!x
在取反之前将x
转换为布尔值。
同样,!!!x
将x
转换为布尔值并取反三次,相当于只取反一次。所以你可以使用!x
而不是!!!x
。
【讨论】:
这个答案很完美,很清楚。【参考方案3】:这是“真”条件。
不,它适用于任何价值。 !!
会将任何值转换为等效的布尔值。
为什么?因为 not 运算符只是返回相反的布尔值。所以
0 // is falsy
!0 // -> true
!!0 // -> false
'foo' // is truthy
!'foo' // -> false
!!'foo' // -> true
任何其他应用程序只会再次切换该值。因此!!!
等价于!
和!!!!
等价于!!
等等。
【讨论】:
【参考方案4】:var boolCheck = 0;
boolCheck //0
!boolCheck //true
!!boolCheck //false
!!!boolCheck //true - again
同样的事情:
var boolCheck = 1;
boolCheck //1
!boolCheck //false
!!boolCheck //true
!!!boolCheck //false - again
没有理由使用这个(!!!),这是一个重言式。 !! 在以下情况下很有用:
-
我们需要一个布尔值,当有一些结果时(!!5 => true);
我们需要将 false 缩短为 !1 或 true - !0。
-
或跳过包装器。
【讨论】:
【参考方案5】:这完美回答了你的问题https://***.com/a/264037/1561922
!!!x 可能正在反转布尔转换 !!x:
var myBool = Boolean("false"); // == true
var myBool = !!"false"; // == true
“任何不为空的字符串都将评估为真”
所以!!!"false"; // == false
这个问题不是开玩笑。 Node.js (downloaded 5 days ago) uses this in Assert.js 例如:
function ok(value, message)
if (!!!value) fail(value, true, message, '==', assert.ok);
assert.ok = ok;
编辑:我认为他们这样做是出于习惯的代码可读性原因,因为!value already suffices。
编辑:Node changed it. 我不知道为什么我 5 天前下载的 Node.js 版本仍然使用 !!!value 而不是 GitHub 中的 !value。
编辑:This is the reason why.
【讨论】:
以上是关于在 JavaScript 中使用 (!!!) 运算符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 Javascript 中使用多个 = 运算符有啥作用? [复制]
在 JavaScript 比较中应该使用哪个等号运算符(== vs ===)?
在 JavaScript 比较中应该使用哪个等号运算符(== vs ===)?
在 JavaScript 比较中应该使用哪个等号运算符(== vs ===)?