1

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

但是假的呢?需要用吗!!!?

4

5 回答 5

4

一个!就足够了:)

!1 // false
!0 // true
于 2013-11-11T15:43:34.480 回答
3

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

转换x为布尔值是!!x有效的,因为当你两次否定一个布尔值时,你会得到原始的布尔值,并在否定它之前!x转换x为布尔值。

同样,!!!x转换x为布尔值并取反三次,相当于只取反一次。所以你可以使用!x而不是!!!x.

于 2013-11-11T16:03:49.840 回答
1

那是“真”条件。

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

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

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

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

任何其他应用程序只会再次切换该值。因此!!!等价于!!!!!等价于!!等等。

于 2013-11-11T15:57:24.597 回答
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. 我们需要用!1true - !0缩短false
    1. 或跳过包装。
于 2013-11-11T15:58:00.987 回答
-1

这完美地回答了你的问题https://stackoverflow.com/a/264037/1561922

!!!x 可能正在反转布尔转换 !!x:

var myBool = Boolean("false");  // == true

var myBool = !!"false";  // == true

“任何不为空的字符串都将评估为真”

所以!!!"false"; // == false

这个问题不是开玩笑。Node.js(5 天前下载)在 Assert.js中使用了这个,例如:

function ok(value, message) {
  if (!!!value) fail(value, true, message, '==', assert.ok);
}
assert.ok = ok;

编辑:我认为他们这样做是出于习惯的代码可读性原因,因为!value 已经足够了

编辑:节点改变了它。我不知道为什么我 5 天前下载的 Node.js 版本仍然使用 !!!value 而不是 GitHub 中的 !value。

编辑:这就是为什么.

于 2014-05-19T15:24:21.273 回答