邏輯非 (!)

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

瀏覽器相容性

另見