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.
- Pouvez-vous forcer IE8 à reconnaître la taille de fond: 100%?
- Dessiner une ligne dans une toile html5 à l'aide de EaselJS
- Comment activer un YUI Datepicker uniquement par une icône séparée, et non par le champ de saisie référencé?
- JS D3 textPath n'est pas affiché
- Dates formatées dans un script Google Apps
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:
&&
||
les opérateurs? 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