Opérateurs logiques AND (&&) et OR (||)

Logical AND ( && ) et OR ( || ) opérateurs — qui savaient qu'ils pourraient nous tromper comme ça 🙂

Leur définition, pour JS (selon cette explication), est la suivante:

Expr1 && expr2 => Renvoie expr1 s'il peut être converti en faux; Sinon, renvoie expr2. Ainsi, lorsqu'il est utilisé avec des valeurs booléennes, && renvoie true si les deux opérandes sont vrais; Sinon, renvoie faux.

Expr1 || Expr2 => Renvoie expr1 s'il peut être converti en true; Sinon, renvoie expr2. Ainsi, lorsqu'il est utilisé avec des valeurs booléennes, || Renvoie true si l'un ou l'autre opérande est vrai; Si les deux sont faux, renvoie faux.

En effet, cela fonctionne comme la définition, mais voici le problème:

 false || "" //returns "" "" || false //returns false 

Donc, évidemment:

 (false || "") == ("" || false) // true 

Mais malheureusement

 (false || "") === ("" || false) // false 

Aux deux principales questions:

  1. && || les opérateurs?
  2. Pourquoi javascript ne peut-il pas convertir expr1 en true dans cette expression ("" || false) ? ". Je veux dire, n'est-il pas aussi simple que de "" précéder "" avec l'opérateur NOT ( ! )?

C'est comme ça qu'ils fonctionnent. Ce n'est pas un bug:

Renvoie expr1 s'il peut être converti en faux; Sinon, retourne expr2

Cela signifie que vous pouvez utiliser "valeurs par défaut", comme ceci:

 function someFunc(passedParameter){ var newValue = passedParameter || 1337 } 

Ou exécutez les fonctions lorsque les conditions sont remplies:

 var myBool = true; myBool && someFunc(); // someFunc will only be evaluated if `myBool` is truthy 

Plus d'informations sur truthy / falsy