逻辑非 (!)

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

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

试一试

const a = 3;
const b = -2;

console.log(!(a > 0 || b > 0));
// Expected output: false

语法

js
!x

描述

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

如果一个值可以转换为 true,则该值被称为真值 (truthy)。如果一个值可以转换为 false,则该值被称为假值 (falsy)

可以转换为 false 的表达式示例有:

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

尽管 ! 运算符可以与非布尔值操作数一起使用,但它仍然可以被视为布尔运算符,因为其返回值始终可以转换为布尔基本类型。要将其返回值(或通常的任何表达式)显式转换为相应的布尔值,请使用双重非运算符(!!)或Boolean构造函数。

示例

使用非运算符

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

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

非运算符之间的转换

以下涉及布尔值的操作

js
!!bCondition

始终等于

js
bCondition

规范

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

浏览器兼容性

另见