双感叹号!!使用在javascript中的功能?

How does the double exclamation (!!) work in javascript?

本问题已经有最佳答案,请猛点这里访问。

我正在浏览"发现流星"的演示,并努力想知道"返回"到底有多准确!!userid;'适用于此部分:

1
2
3
4
5
6
Posts.allow({
  insert: function(userId, doc) {
  // only allow posting if you are logged in
    return !! userId;
  }
});


!是逻辑否定或"非"运算符。!!!的两倍。这是一种将"真实"或"虚伪"值分别铸造为truefalse的方法。给定一个布尔值,!将否定该值,即!true生成false,反之亦然。如果给定的不是布尔值,则该值将首先转换为布尔值,然后求反。例如,!undefined首先将undefined转换为false,然后将其否定,生成true。应用第二个!操作符(!!undefined生成false,因此实际上!!undefinedundefined转换为false

在javascript中,值falsenullundefined0-0NaN''(空字符串)是"假"值。所有其他值都是"真实的"。(1):7.1.2以下是适用于各种值的!!!的真值表:

1
2
3
4
5
6
7
8
9
10
11
12
13
 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