什么是“!!' 语法在 JavaScript 中的意思

What does the '!!!' syntax mean in javascript?

本文关键字:JavaScript 语法 意思 什么      更新时间:2023-09-26

我刚刚在其中一个 Windows 应用商店应用示例中遇到了以下代码行。

if (that.assets[asset].object === null || !!!that.assets[asset].object.canPlayType) {

它使用三重感叹号语法。我已经做了一些测试(我很确定我错过了一些东西),结果总是相同的一个!。我认为它在某种程度上等同于===!==......

谁能解释一下!!!语法的含义?

我认为它有点等同于 === 和 !==...

不,它只是三个"不是"运算符,一个"不是不是"。

它和!(!(!(x)))一样,总是等价于一个!x

这实际上没有任何用处。 !!是一种将任何变量转换为其布尔表示的有点神秘的方法,但!!!只是愚蠢的。您可以将任意数量的!链接在一起,但它对任何事情都没有用。

!!是三重否定,所以它与!相同:

!true -> false
!!true -> true
!!!true -> false

这完美地回答了您的问题 https://stackoverflow.com/a/264037/1561922

!!x 可能正在反转布尔转换!!十:

var myBool = Boolean("false");  // == true
var myBool = !!"false";  // == true

"任何不为空的字符串都将计算为 true"

所以!!!"false"; // == false

这个问题不是开玩笑。Node.js(5 天前下载)在 Assert 中使用它.js例如:

function ok(value, message) {
  if (!!!value) fail(value, true, message, '==', assert.ok);
}
assert.ok = ok;

编辑:我认为他们出于习惯性的原因这样做是出于代码可读性的原因,因为!value已经足够了。

编辑:节点更改了它。我不知道为什么我的 5 天前下载的 Node.js 版本仍然与 !!值,而不是 GitHub 中的 !value。

编辑:乔纳森在这里解释了原因。Nodejs.org的稳定版本v0.10.xx仍然有!!值,并且不稳定版本 v0.11.xx 具有 !value 修正。