关于javascript语法:’!!!’是什么

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

我刚刚在一个WindowsStore应用程序示例中遇到以下代码行。

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

它使用三重感叹号语法。我做了一些测试(我很肯定我遗漏了一些东西),结果在单个!中总是一样的。我认为它与===!==有些相似。

有人能解释一下!!!语法的含义吗?


I assumed it was somewhat equivalent to === and !==...

不,只有三个"不"运算符,一个"不"运算符。

它与!(!(!(x)))相同,总是等同于单个!x

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


!真-假

!!

!!!!真-假


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

!!!!X可能正在反转布尔转换!X:

1
2
3
var myBool = Boolean("false");  // == true

var myBool = !!"false";  // == true

"任何非空字符串的值都将为true"

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

这个问题不是笑话。node.js(5天前下载)在assert.js中使用它,例如:

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

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

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

编辑:乔纳森解释了原因。nodejs.org的稳定版本v0.10.xx还有!!!!值,不稳定版本v0.11.xx具有!价值修正。