論理否定 (!)
論理否定 (!
) 演算子 (論理反転、否定) は、真値を取ると偽値になり、その逆も同様です。これは通常論理型 (ブール型) の値に使用されます。論理型以外の値に使用した場合、単一のオペランドが true
に変換できる場合は false
を返し、それ以外は true
を返します。
試してみましょう
構文
!expr
解説
単一のオペランドが true
に変換できる場合は false
を返し、それ以外は true
を返します。
ある値が true
に変換できる場合、その値は真値 (truthy) と呼ばれます。ある値が false
に変換できる場合、その値は偽値 (falsy) と呼ばれます。
false に変換することができる式の例を示します。
null
NaN
0
- 空文字列 (
""
または''
または``
) undefined
!
演算子は論理値以外のオペランドに対して使用することができますが、返値が常に論理型プリミティブに変換することが可能であるため、論理演算子と見なすことができます。返値 (または一般的な式) を対応する論理値に明示的に変換するには、二重の否定演算子または Boolean
コンストラクターを使用してください。
例
否定の使用
以下のコードは !
(論理否定) 演算子の例を示しています。
n1 = !true // !t は false を返す
n2 = !false // !f は true を返す
n3 = !'' // !f は true を返す
n4 = !'Cat' // !t は false を返す
二重否定 (!!
)
複数の否定演算子を連続して使用することで、明示的にあらゆる値を対応する論理型プリミティブに変換することができます。変換は値の「真値性」または「偽値性」に基づいて行われます (truthy および falsy を参照)。
同じ変換は Boolean
関数を通じて行うこともできます。
n1 = !!true // !!truthy は true を返す
n2 = !!{} // !!truthy は true: *あらゆる*オブジェクトは真値になります...
n3 = !!(new Boolean(false)) // ... .valueOF() が false の Boolean オブジェクトであっても
n4 = !!false // !!falsy は false を返す
n5 = !!"" // !!falsy は false を返す
n6 = !!Boolean(false) // !!falsy は false を返す
否定同士の変換
以下の操作を論理値で行った場合、
!!bCondition
常に以下のものと等しくなります。
bCondition
仕様書
Specification |
---|
ECMAScript Language Specification # sec-logical-not-operator |
ブラウザーの互換性
BCD tables only load in the browser