web-dev-qa-db-fra.com

Que signifient deux lignes verticales dans une valeur d'objet en javascript?

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?

20
tim peterson

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".

40
apsillers

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), alors new 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:

5
David Thomas
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
5
K2xL

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();
}
1
yoah

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.

0
Denis Ermolin