在JavaScript中使用(!!!)运算符?

Using the (!!!) operator in JavaScript?

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

!!运算符显然很有用,因为它强制检查某个不是布尔值的对象,即"真"条件。

但假呢?你需要使用吗?!!!?


一个!就足够了。)

1
2
!1 // false
!0 // true


!!本身不是一个操作符,它只是一种使用javascript的逻辑非(!操作符的方法。

要将x转换为布尔值,!!x会起作用,因为当两次对布尔值求反时,会得到原始布尔值,而!x会先将x转换为布尔值,然后再对其求反。

同样,!!!xx转换为布尔值,并对其求反三次,这相当于只求反一次。所以你可以用!x代替!!!x


that's for"True" conditions.

不,这是任何价值。!!将转换其等效布尔值中的任何值。

为什么?因为not运算符只返回相反的布尔值。所以

1
2
3
4
5
6
7
0    // is falsy
!0   // -> true
!!0  // -> false

'foo'    // is truthy
!'foo'   // -> false
!!'foo'  // -> true

任何附加应用程序都将再次切换该值。因此,!!!相当于!!!!!相当于!!等。


这完美地回答了您的问题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中的值。

编辑:这就是原因。


1
2
3
4
5
var boolCheck = 0;
   boolCheck //0
  !boolCheck //true
 !!boolCheck //false
!!!boolCheck //true - again

这里也一样:

1
2
3
4
5
var boolCheck = 1;
   boolCheck //1
  !boolCheck //false
 !!boolCheck //true
!!!boolCheck //false - again

没有理由使用这个(!!!!)这是一个重言式。!!!是有用的:

  • 我们需要一个布尔值,当有一些结果(!5=>真;
  • 我们需要缩短假与!1或是真的!0。
  • 或者跳过包装。