Javascript : Le !!

N’avez vous jamais rencontré en Javascript l’opérateur !! ..? Oui oui, un double point d’exclamation.
Je l’ai rencontré pour la première fois ce matin, et j’ai voulu en savoir un peu plus.

Sauf que c’est pas évident de trouver une bonne réponse, le mieux fût donc de tester.

function test1() {
    var test = 'du texte' ;
    console.log(typeof(test)) ;
}

Tout d’abord, on va se créer une variable contenant du texte, et afficher son type.
Le code va tout logiquement me renvoyer string. Normal.

Maintenant imaginons que je veuille vérifier si la variable test est définie ou non.
Je pourrais faire ainsi :

function test2() {
    var test = '' ;
    if (test === null || test === undefined || test == '') {
        // Ben oui car on aurait pu définir test de plusieurs façon :
        // var test ;
        // var test = null ;
    }
}

Eh ben c’est là qu’intervient le !!
Détaillons.

Le premier ! va transformer notre variable en Booléen :

var test ;
console.log(!test) // Réponse : true

Maintenant on rajoute un deuxième !

var test ;
console.log(!!test) // Réponse : false

Voila je viens de tester si ma variable test contient quelque chose, ou si elle est :

  • null
  • undefined
  • vide ( var test = “” )

Il y a un problème quand même, cela ne fonctionne pas sur les tableaux et les objets. Merci Javascript.
Par exemple :

function test3() {
    var test = [] ;
    console.log(!!test) ; // Réponse : true (alors que le tableau est vide)
}

function test4() {
    var test = {} ;
    console.log(!!test) ; // Réponse : true (alors que l'objet est vide)
}

Voila en espérant avoir pu éclairer légèrement vos lanternes ..

A lire aussi :  Pagination avec de l'Ajax, sans Ajax !

3 pensées sur “Javascript : Le !!

  • 5 octobre 2012 à 14:35
    Permalink

    Cool 🙂

    Et maintenant, un petit cours sur le ~~ ?

    Répondre
    • 5 octobre 2012 à 16:12
      Permalink

      Effectivement je pourrais faire un petit post sur le ~~ qui est une alternative au Math.floor().

      Rentrer un peu plus en détail dans son fonctionnement pourrait être sympa 🙂

      Merci pour la suggestion.

      Répondre
    • 20 décembre 2018 à 10:56
      Permalink

      Bonjour,
      En fait !! ,n’est pas un opérateur, mais la combinaison de deux !,
      Pour s’en convaincre il suffit de regarder
      https://www.ecma-international.org/ecma-262/5.1/
      et de le chercher….

      L’utilité de ce double usage du ! est de caster la valeur en booleen.
      Les valeurs undefined, null, ou ” étant déja par nature falsy, je trouve cet usage très limité,

      en fait si je tape dans la console d’un navigateur la valeur test sans la double négation, le fait d’être l’argument d’un if, va de toute façon interpréter cette valeur en booléen…

      if(undefined){ “oui”}else{“non”}
      “non”
      if(null){ “oui”}else{“non”}
      “non”
      if(”){ “oui”}else{“non”}
      “non”

      Répondre

Laisser un commentaire

You have to agree to the comment policy.