JavaScript Court-circuit dans les opérateurs booléens


Exemple

L'opérateur-opérateur ( && ) et l'opérateur-opérateur ( || ) utilisent un court-circuit pour empêcher tout travail inutile si le résultat de l'opération ne change pas avec le travail supplémentaire.

Dans x && y , y ne sera pas évalué si x évalué comme false , car l'expression entière est garantie être false .

En x || y , y ne sera pas évalué si x évalué à true , car il est garanti que toute l'expression est true .

Exemple avec des fonctions

Prenez les deux fonctions suivantes:

function T() { // True
  console.log("T");
  return true;
}

function F() { // False
  console.log("F");
  return false;
}

Exemple 1

T() && F(); // false

Sortie:

'T'
'F'

Exemple 2

F() && T(); // false

Sortie:

'F'

Exemple 3

T() || F(); // true

Sortie:

'T'

Exemple 4

F() || T(); // true

Sortie:

'F'
'T'


Court-circuit pour éviter les erreurs

var obj; // object has value of undefined
if(obj.property){ }// TypeError: Cannot read property 'property' of undefined
if(obj.property && obj !== undefined){}// Line A TypeError: Cannot read property 'property' of undefined

Ligne A: si vous inversez la commande, la première instruction conditionnelle empêchera l'erreur sur la seconde en ne l'exécutant pas si elle génère l'erreur

if(obj !== undefined && obj.property){}; // no error thrown 

Mais ne devrait être utilisé que si vous attendez undefined

if(typeof obj === "object" && obj.property){}; // safe option but slower

Court-circuit pour fournir une valeur par défaut

Le || L'opérateur peut être utilisé pour sélectionner une valeur "Vérité" ou la valeur par défaut.

Par exemple, cela peut être utilisé pour garantir qu'une valeur nullable est convertie en une valeur non nullable:

var nullableObj = null;
var obj = nullableObj || {};  // this selects {}

var nullableObj2 = {x: 5};
var obj2 = nullableObj2 || {} // this selects {x: 5}

Ou pour retourner la première valeur véridique

var truthyValue = {x: 10};
return truthyValue || {}; // will return {x: 10}

La même chose peut être utilisée pour reculer plusieurs fois:

envVariable || configValue || defaultConstValue // select the first "truthy" of these

Court-circuit pour appeler une fonction optionnelle

L'opérateur && peut être utilisé pour évaluer un rappel, uniquement s'il est transmis:

function myMethod(cb) {
    // This can be simplified
    if (cb) {
       cb();
    }

    // To this
    cb && cb();
}

Bien sûr, le test ci-dessus ne valide pas que cb est en fait une function et pas seulement un Object / Array / String / Number .