Duplicata possible:
Que fait l'opérateur ||?
Peut-être que quelqu'un peut fournir un meilleur extrait de code, mais qu'est-ce que ||
signifie ce qui suit?:
var time = $(el).data('start') || new Date();
Est-ce un opérateur or
et si oui, comment est-il logique qu'une variable puisse avoir deux valeurs différentes?
Il s'agit d'un opérateur OR
. Ce que vous devez comprendre, c'est:
Les valeurs non booléennes sont converties en booléennes lorsqu'elles sont utilisées dans un opérateur logique. Les valeurs converties en false
sont appelées "fausses" et les valeurs converties en true
sont appelées "véridiques". Les valeurs fausses incluent des éléments comme 0
, undefined
, null
, etc. Voir plus sur Truthy et Falsy: Quand tout n'est pas égal en JavaScript .
L'opérateur OR
court-circuite : il continue d'évaluer les expressions jusqu'à ce qu'il trouve que c'est true
, puis s'arrête .
Ainsi, var time = $(el).data('start') || new Date();
signifie "définir time
sur les données start
de l'élément el
, OU, si c'est faux, utilisez l'heure actuelle".
Cela signifie "ou". Dans ce cas, il affecte la valeur de $(el).data('start')
à la variable time
ou, si elle n'existe pas ou renvoie à la place false
, elle affecte à la place la valeur renvoyée par new Date()
. Ou, comme le note plus clairement Malovolio, dans les commentaires:
... si
$(el).data('start')
est "falsy" (c'est-à-dire non défini, null, 0, false, une chaîne vide ou NaN), alorsnew Date()
est évalué et affecté àtime
.
L'aspect important d'un opérateur logique:
Les opérateurs logiques sont généralement utilisés avec des valeurs booléennes (logiques); lorsqu'ils le sont, ils renvoient une valeur booléenne. Cependant, les && et || les opérateurs retournent en fait la valeur de l'un des opérandes spécifiés, donc si ces opérateurs sont utilisés avec des valeurs non booléennes, ils peuvent retourner une valeur non booléenne.
Références:
exp1 || exp2
évalue exp1. Si exp1 est vrai, exp2 n'est pas évalué (appelé évaluation de court-circuit). Si exp1 renvoie false, exp 2 est évalué. Si exp1 OR exp2 est vrai, alors (exp1 || exp2) est évalué comme vrai.
Mais en Javascript, vous pouvez définir des valeurs à l'aide de l'opérateur.
a = something
if (prop)
a = prop
peut être réécrit comme
a = prop || something
La façon dont l'opérateur || est évalué est que si la première partie est true-ish, il l'a renvoyée. Si la première partie est fausse, elle renvoie la seconde. Les expressions ci-dessus sont donc équivalentes à:
if ($(el).data('start')) {
time = $(el).data('start');
} else {
time = new Date();
}
Cela signifie logical sum
. var time = $(el).data('start') || new Date();
si $(el).data('start')
aura undefined
ou false
valeur alors time
aura la valeur de new Date
fonction.