2017-10-01 37 views
0

je suis tombé sur la solution suivante des opérateurs logiques, mais ne pouvaient pas comprendre la logique derrière:Opérateurs logiques (et les opérateurs)

console.log(1 && 2) vous obtiendrez 2

console.log(false && X) vous obtiendrez false

console.log(true && X) va obtenir vous UncaughtReferenceError:X is not defined

Quelqu'un peut-il expliquer la réponse?

Répondre

4

Regardez le documentation pour l'opérateur &&:

& &; Renvoie expr1 si elle peut être convertie en false; sinon, renvoie expr2. Ainsi, lorsqu'il est utilisé avec des valeurs booléennes, & & renvoie true si les deux opérandes sont vrais; sinon, renvoie false.

Dans le premier exemple, vous fournissez les nombres 1 et 2 en tant qu'opérandes. 1 ne peut pas être converti en false, par conséquent le deuxième opérande, qui se trouve être 2, est renvoyé.

Les deux derniers exemples sont assez simples, car des booléens sont impliqués. Si l'un des opérandes est faux, vous obtenez false. La raison pour laquelle seulement le troisième vous donne une erreur est parce que dans la seconde, le deuxième opérande (X) n'est jamais vérifié en raison d'un court-circuit. Le court-circuit signifie que lorsque JS voit que la première valeur est false, il ne prend même pas la peine de vérifier l'autre valeur. JS voit false comme le premier opérande et revient immédiatement.

1

Considérez donc l'instruction suivante: A && B. Ce que l'opérateur && fait ici est de retourner Aseulement si sa valeur est false sinon il renvoie B. C'est ainsi que fonctionne l'opérateur AND en JavaScript et dans la plupart des autres langues. Donc, cela explique les 2 premières lignes de code. Dans la troisième ligne, l'instruction doit renvoyer la variable B qui est X ici. Cependant, X semble être une variable non déclarée, de sorte que la console génère une erreur.

1

En JavaScript, il existe des valeurs de vérité et de fausseté. Les valeurs sont falsy

  • false
  • 0 (le nombre zéro),
  • "" ou '' (la chaîne vide),
  • undefined et null.

Toutes les autres valeurs sont véridiques.

Voici comment l'opérateur && fonctionne en JavaScript:

  1. Évaluer le premier opérande. Si le résultat est une valeur falsifiée, renvoyez cette valeur.
  2. Sinon, évaluez le second opérande et renvoyez sa valeur.

Jetons un coup d'oeil à vos exemples:

  • Le 1 dans 1 && 2 est truthy, donc 2 est évaluée et renvoyée comme valeur de l'expression.

  • Le false dans false && X est falsifié, il est donc renvoyé en tant que valeur de l'expression. Le deuxième opérande (X) ne sera pas évalué.

  • Le truetrue && X est en truthy, de sorte que le second opérande est évalué, qui renvoie une erreur, car il n'y a pas X.

Ce comportement est très utile si vous voulez avoir une valeur de repli:

function logName (options) { 
 
    const name = options.name || 'Default name'; 
 
    console.log(name); 
 
} 
 

 
logName({ name: 'foo' }); // logs 'foo' 
 
logName({ name: '' }); // logs 'Default name' 
 
logName({});    // logs 'Default name'