逻辑非 (!)

**逻辑非 (!)** (逻辑补码,否定) 运算符将真值转换为假值,反之亦然。它通常与布尔 (逻辑) 值一起使用。当与非布尔值一起使用时,如果其单个操作数可以转换为 `true`,则返回 `false`;否则,返回 `true`。

试一试

语法

js
!x

描述

如果其单个操作数可以转换为 `true`,则返回 `false`;否则,返回 `true`。

如果一个值可以转换为 `true`,则该值被称为 真值。如果一个值可以转换为 `false`,则该值被称为 假值.

可以转换为 false 的表达式的示例包括

  • null;
  • NaN;
  • 0;
  • 空字符串 (""''``);
  • undefined.

即使 `!` 运算符可以与非布尔值的操作数一起使用,它仍然可以被认为是一个布尔运算符,因为它的返回值始终可以转换为 布尔原始值。若要显式地将其返回值 (或任何表达式) 转换为相应的布尔值,请使用双非运算符 (!!) 或 Boolean 构造函数。

示例

使用 NOT

以下代码展示了 `!` (逻辑非) 运算符的示例。

js
!true; // !t returns false
!false; // !f returns true
!""; // !f returns true
!"Cat"; // !t returns false

双非 (!!)

可以连续使用一对非运算符,以显式地强制将任何值转换为相应的 布尔原始值。转换基于值的“真值”或“假值”(参见 真值假值)。

相同的转换可以通过 Boolean() 函数完成。

js
!!true; // !!truthy returns true
!!{}; // !!truthy returns true: any object is truthy...
!!new Boolean(false); // ...even Boolean objects with a false .valueOf()!
!!false; // !!falsy returns false
!!""; // !!falsy returns false
!!Boolean(false); // !!falsy returns false

在 NOT 之间进行转换

以下涉及 **布尔值** 的操作

js
!!bCondition

始终等于

js
bCondition

规范

规范
ECMAScript 语言规范
# sec-logical-not-operator

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参见