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

时间:2013-11-11 15:40:31

标签: javascript

!!运算符显然很有用,因为它强制检查一个不是布尔值的东西作为布尔值 - 这是“真实”条件。

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

5 个答案:

答案 0 :(得分:4)

一个!就够了:)

!1 // false
!0 // true

答案 1 :(得分:3)

!!本身不是运营商;它只是一种使用JavaScript逻辑NOT(!)运算符的方式。

要将x转换为布尔值,!!x有效,因为当你两次取消布尔值时,你得到原始布尔值,而!xx转换为布尔值否定它。

同样,!!!xx转换为布尔值并将其否定三次,这相当于仅将其否定一次。因此,您可以使用!x代替!!!x

答案 2 :(得分:1)

  

那是“真实”的条件。

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

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

0    // is falsy
!0   // -> true
!!0  // -> false

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

任何其他应用程序只会再次切换值。因此!!!相当于!!!!!相当于!!,依此类推。

答案 3 :(得分:0)

var boolCheck = 0;
   boolCheck //0
  !boolCheck //true
 !!boolCheck //false
!!!boolCheck //true - again

同样的事情:

var boolCheck = 1;
   boolCheck //1
  !boolCheck //false
 !!boolCheck //true
!!!boolCheck //false - again

没有理由使用这个(!!!),这是一个重言式。 !! 在以下情况下非常有用:

  1. 我们需要有一个布尔值,当有一些结果时(!! 5 => true);
  2. 我们需要使用!1 true - !0 缩短 false
    1. 或跳过包装。

答案 4 :(得分:0)

这完全回答了您的问题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.我不知道为什么我5天前下载的Node.js版本仍然使用!!!值而不是GitHub中的!值。

编辑:This is the reason why