我刚刚在一个Windows Store Apps示例中遇到了以下代码。
if (that.assets[asset].object === null || !!!that.assets[asset].object.canPlayType) {
它使用三重感叹号语法。我已经进行了一些测试(我很确定我错过了一些东西),并且单个!
的结果始终相同。我认为它有点等效于===
和!==
...
任何人都可以解释!!!
语法的含义吗?
我认为它在某种程度上等同于===和!== ...
不,它只是三个“ not”运算符,一个“ not-not-not”。
与!(!(!(x)))
相同,并且始终等效于单个!x
。
实际上没有任何用处。 !!
是将任何变量转换为其布尔表示形式的一种隐秘方式,但是!!!
只是愚蠢的。您可以将任意数量的!
链接在一起,但是对任何事情都没有用。
!!!是三次否定,因此与!:
相同!true -> false
!!true -> true
!!!true -> false
这可以完美地回答您的问题https://stackoverflow.com/a/264037/1561922
!!! x可能正在反转布尔转换!! x:
var myBool = Boolean("false"); // == true
var myBool = !!"false"; // == true
“任何不为空的字符串都将为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.我不知道为什么五天前下载的Node.js版本仍然使用!!! value而不是GitHub中的!value。
编辑:Jonathan explains why here。 Nodejs.org的稳定版本v0.10.xx仍然具有!!! value,而不稳定版本v0.11.xx具有!value修正。