web-dev-qa-db-fra.com

raccourci javascript if, sans la partie else

J'utilise donc un raccourci javascript if/else (j'ai lu quelque part on les appelle des instructions ternaires?)

this.dragHandle.hasClass('handle-low') ? direction = "left" : direction = "right"

Cela fonctionne très bien, mais que se passe-t-il si plus tard je veux utiliser simplement un raccourci if, sans la partie else. Comme:

direction == "right" ? slideOffset += $(".range-slide").width()

est-ce possible?

35
ahren

vous pouvez utiliser l'opérateur && - la deuxième expression d'opérande n'est exécutée que si la première est vraie

direction == "right" && slideOffset += $(".range-slide").width()

à mon avis, if(conditon) expression est plus lisible que condition && expression

44
Andrey Sidorov

Ne le pensez pas comme un bloc de contrôle (c'est-à-dire: un if-else ou un commutateur). Il n'est pas vraiment destiné à exécuter du code à l'intérieur.

Vous pouvez. Cela devient très moche, très rapide, ce qui va à l'encontre du but.

Ce que vous voulez vraiment l'utiliser, c'est ATTRIBUTION DE VALEURS .

En prenant votre exemple initial et en le tournant un peu sur la tête, vous obtenez:

direction = (this.dragHandle.hasClass("handle-low")) ? "left" : "right";

Voir. Maintenant, ce que j'ai fait, c'est que j'ai pris quelque chose qui aurait nécessité un if/else ou un commutateur, qui aurait été utilisé pour attribuer à cette seule valeur, et je l'ai nettoyé Nice et joli.

Vous pouvez même faire un type ternaire else-if:

y = (x === 2) ? 1 : (x === 3) ? 2 : (x === 4) ? 7 : 1000;

Vous pouvez également l'utiliser pour déclencher du code, si vous le souhaitez, mais il devient vraiment difficile après un certain temps, de savoir ce qui se passe où (voir l'exemple précédent pour voir comment même une affectation peut commencer à paraître bizarre en un coup d'œil) ...

((this.dragHandle.hasClass("...")) ? fireMe(something) : noMe(somethingElse));

... cela fonctionnera généralement.

Mais ce n'est pas vraiment plus joli ou plus utile qu'une fonction if ou une branche, invoquant immédiatement (et les programmeurs non JS ou les programmeurs JS non formés vont se faire chier en essayant de maintenir votre code).

9
Norguard

Ce que vous avez ne fonctionnera pas, mais pourquoi ne pas simplement utiliser une instruction if d'une ligne à la place.

if(direction == "right") slideOffset += $(".range-slide").width();

Cela implique moins de frappe que la méthode suggérée par Ray. Bien sûr, sa réponse est valable si vous voulez vraiment vous en tenir à ce format.

2
twiz

Non, ce n'est pas possible, car l'opérateur ternaire nécessite, trois opérandes avec lui.

first-operand ? second-operand (if first evaluates to true) : third-operand (if false)
2
Yograj Gupta

Cela ne répond pas exactement à votre question, mais les ternaires vous permettent d'écrire moins que ce que vous avez montré:

direction = this.dragHandle.hasClass('handle-low') ? "left" : "right";

Et maintenant que j'y pense, oui, vous pouvez aussi poser votre question:

slideOffset + direction == "right" ? = $(".range-slide").width() : = 0;

Ceci est une théorie. La prochaine fois que j'aurai l'occasion de += un ternaire je vais essayer ça. Dites-moi comment ça marche!

1
Dale