双重感叹号(!)在 javascript 中是如何工作的?

我正在通过发现流星演示,并努力找出究竟如何’返回! !UserId;’在 这部分中工作:

Posts.allow({
insert: function(userId, doc) {
// only allow posting if you are logged in
return !! userId;
}
});
97519 次浏览

ABc0是逻辑非或“非”操作员。!!!两次。这是一种将“真实”或“虚假”值分别投射到 truefalse的方法。给定一个布尔值,!将负值,即 !true产生 false,反之亦然。如果给定的不是布尔值,那么这个值将首先被转换为布尔值,然后被否定。例如,!undefined将首先将 undefined转换为 false,然后否定它,产生 true。应用第二个 !操作符(!!3)产生 false,因此实际上 !!3将 undefined转换为 false

在 JavaScript 中,值 falsenullundefined0-0NaN''(空字符串)是“ false”值。其他的价值观都是“真实”的。“ < sup > (1) : 7.1.2 这是 !!!适用于不同价值观的真理表:

 value     │  !value  │  !!value
━━━━━━━━━━━┿━━━━━━━━━━┿━━━━━━━━━━━
false     │ ✔ true   │   false
true      │   false  │ ✔ true
null      │ ✔ true   │   false
undefined │ ✔ true   │   false
0         │ ✔ true   │   false
-0        │ ✔ true   │   false
1         │   false  │ ✔ true
-5        │   false  │ ✔ true
NaN       │ ✔ true   │   false
''        │ ✔ true   │   false
'hello'   │   false  │ ✔ true