En JavaScript, les deux ||
y &&
sont des opérateurs de court-circuit logique qui renvoient la première "valeur logique" entièrement déterminée lorsqu'ils sont évalués de gauche à droite.
Dans l'expression X || Y
, X
est d'abord évalué, puis interprété comme une valeur booléenne. Si cette valeur booléenne est "vraie", elle est retournée. Et Y
n'est pas évalué. (Parce qu'il n'est pas important de savoir si Y
est vrai ou Y
est fausse, X || Y
a été entièrement déterminé). C'est la partie court-circuit.
Si cette valeur booléenne est "false", alors nous ne savons toujours pas si X || Y
est vrai ou faux jusqu'à ce que nous évaluions Y
et l'interprète également comme une valeur booléenne. Ainsi donc Y
est renvoyé.
Et &&
fait la même chose, sauf qu'il arrête l'évaluation si le premier argument est faux.
Le premier point délicat est que lorsqu'une expression est évaluée comme "vraie", l'expression elle-même est renvoyée. Ce qui compte comme "vrai" dans les expressions logiques, mais vous pouvez aussi l'utiliser. C'est pourquoi vous voyez des valeurs réelles retournées.
La deuxième difficulté réside dans le fait que, lorsqu'une expression est évaluée comme étant "fausse", le système renvoie la valeur booléenne "false" en JS 1.0 et 1.1, alors qu'en JS 1.2, il renvoie la valeur réelle de l'expression.
Dans JS false
, 0
, -0
, ""
, null
, undefined
, NaN
y document.all
tous compter comme faux .
Ici, je cite bien sûr des valeurs logiques pour les besoins de la discussion. Bien sûr, la chaîne littérale "false"
n'est pas la même que la valeur false
et est donc vrai.