逻辑非(!)

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

逻辑非!,逻辑连接取反)运算符将真值或假值转换为对应的相反值,经常用于布尔(逻辑)值。当与非布尔值使用时,如果其操作数可以转化为 true,则返回 false,否则返回 true

尝试一下

const a = 3;
const b = -2;

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

语法

js
!expr

描述

如果其操作数可以转化为 true,则返回 false,否则返回 true

能够转化为 true 的值叫做真值,能够转化为 false 的值叫做假值

能够转化为 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

规范

Specification
ECMAScript® 2025 Language Specification
# sec-logical-not-operator

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
Logical NOT (!)

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

参见