NON logique (!)

L'opérateur logique NON (!) prend l'opposé logique de la valeur fournie par son opérande. Vrai devient faux et vice versa. Il est généralement utilisé avec les booléens. Lorsque cet opérateur est utilisé avec une valeur non-booléenne, il renvoie false si son opérande peut être converti en true et true sinon.

Exemple interactif

Syntaxe

js
!expr;

Description

Cet opérateur renvoie false si son opérande peut être converti en true ; sinon il renvoie true.

Si une valeur peut être convertie en true, on dira en anglais qu'elle est truthy. À l'inverse, si elle peut être convertie en false, on dira en anglais qu'elle est falsy.

Voici des exemples d'expression qui peuvent être converties en false :

  • null ;
  • NaN ;
  • 0 ;
  • la chaîne vide ("" ou '' ou ``) ;
  • undefined.

Bien que l'opérateur ! puisse être utilisé avec des opérandes non booléens, sa valeur de retour sera toujours un booléen. Pour convertir une valeur (ou une expression) en sa valeur booléenne correspondante, on pourra utiliser un double NON ou le constructeur Boolean.

Exemples

Utiliser NON

Le code suivant illustre l'utilisation de l'opérateur ! pour le NON logique.

js
let n1 = !true; // !t renvoie false
let n2 = !false; // !f renvoie true
let n3 = !""; // !f renvoie true
let n4 = !"Cat"; // !t renvoie false

Double NON (!!)

Il est possible d'utiliser deux opérateurs NON à la suite pour convertir n'importe quelle valeur en booléen selon qu'elle est truthy ou falsy.

Une conversion équivalente pourra être obtenue avec le constructeur Boolean.

js
let n1 = !!true; // !!truthy renvoie true
let n2 = !!{}; // !!truthy renvoie true : tout objet est truthy
let n3 = !!new Boolean(false); // Attention, un objet Boolean est toujours truthy !
let n4 = !!false; // !!falsy renvoie false
let n5 = !!""; // !!falsy renvoie false
let n6 = !!Boolean(false); // !!falsy renvoie false

Équivalence booléenne de la double négation

L'expression qui suit, utilisée avec des booléens :

js
!!bCondition;

est toujours égale à :

js
bCondition;

Spécifications

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

Compatibilité des navigateurs

BCD tables only load in the browser

Voir aussi