我刚刚在其中一个Windows应用商店应用中遇到了以下代码行。
if (that.assets[asset].object === null || !!!that.assets[asset].object.canPlayType) {
它使用三重感叹号语法。我做了一些测试(我很确定我错过了一些东西),结果总是一样!
。我认为它有点等同于===
和!==
...
任何人都可以解释!!!
语法的含义吗?
答案 0 :(得分:6)
我认为它有点等同于===和!== ...
不,这只是三个“非”运营商,“不是不是”。
与!(!(!(x)))
相同,并且始终相当于一个!x
。
对此毫无用处。 !!
是一种将任何变量转换为其布尔表示的神秘方法,但!!!
只是愚蠢。你可以将任意数量的!
链接在一起,但它对任何东西都没用。
答案 1 :(得分:1)
!true - >假
!! true - >真
!!! true - >假
答案 2 :(得分:-1)
这完全回答了您的问题https://stackoverflow.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版本仍然使用!!!值而不是GitHub中的!值。
编辑:Jonathan explains why here。 Nodejs.org的稳定版本v0.10.xx仍具有!!!值,而不稳定版本v0.11.xx具有!值修正。