Comment puis-je utiliser une if
instruction inline en JavaScript? Existe-t-il également une else
déclaration en ligne ?
Quelque chose comme ça:
var a = 2;
var b = 3;
if(a < b) {
// do something
}
Comment puis-je utiliser une if
instruction inline en JavaScript? Existe-t-il également une else
déclaration en ligne ?
Quelque chose comme ça:
var a = 2;
var b = 3;
if(a < b) {
// do something
}
Réponses:
Vous n'avez pas nécessairement besoin de jQuery. Seul JavaScript fera cela.
var a = 2;
var b = 3;
var c = ((a < b) ? 'minor' : 'major');
La c
variable sera minor
si la valeur est true
, et major
si la valeur est false
.
C'est ce qu'on appelle un opérateur conditionnel (ternaire).
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Conditional_Operator
if (a < b) c = 'major';
Il existe un opérateur ternaire, comme celui-ci:
var c = (a < b) ? "a is less than b" : "a is not less than b";
0 < 1 : 5 : 120;
est une déclaration parfaitement valable. Un peu inutile, sauf si vous êtes payé par ligne.
if
déclaration ennuyeuse dans un tel cas rendra probablement votre code beaucoup plus facile à lire et à comprendre, et moins susceptible de rompre avec les modifications ultérieures.
Vous pouvez également approximer un if / else en utilisant uniquement des opérateurs logiques.
(a && b) || c
Ce qui précède équivaut à peu près à dire:
a ? b : c
Et bien sûr, à peu près la même chose que:
if ( a ) { b } else { c }
Je dis à peu près parce qu'il y a une différence avec cette approche, en ce que vous devez savoir que la valeur de b
sera évaluée comme vraie, sinon vous obtiendrez toujours c
. Fondamentalement, vous devez réaliser que la partie qui apparaîtrait if () { here }
fait maintenant partie de la condition que vous placez if ( here ) { }
.
Ce qui précède est possible en raison du comportement JavaScripts de passer / renvoyer l'une des valeurs d'origine qui ont formé l'expression logique, laquelle dépend du type d'opérateur. Certains autres langages, comme PHP, conservent le résultat réel de l'opération, c'est-à-dire vrai ou faux, ce qui signifie que le résultat est toujours vrai ou faux; par exemple:
14 && 0 /// results as 0, not false
14 || 0 /// results as 14, not true
1 && 2 && 3 && 4 /// results as 4, not true
true && '' /// results as ''
{} || '0' /// results as {}
Un avantage principal, par rapport à une instruction if normale, est que les deux premières méthodes peuvent fonctionner du côté droit d'un argument, c'est-à-dire dans le cadre d'une affectation.
d = (a && b) || c;
d = a ? b : c;
if `a == true` then `d = b` else `d = c`
La seule façon d'y parvenir avec une instruction if standard serait de dupliquer l'assignation:
if ( a ) { d = b } else { d = c }
Vous pouvez vous demander pourquoi utiliser uniquement des opérateurs logiques au lieu de l' opérateur ternaire , pour des cas simples, vous ne le feriez probablement pas, sauf si vous vouliez vous en assurer a
et que les b
deux étaient vrais. Vous pouvez également obtenir des conditions complexes plus rationalisées avec les opérateurs logiques, qui peuvent devenir assez compliqués à l'aide d'opérations ternaires imbriquées ... là encore si vous voulez que votre code soit facilement lisible, ni vraiment intuitif.
En clair, la syntaxe expliquait:
if(condition){
do_something_if_condition_is_met;
}
else{
do_something_else_if_condition_is_not_met;
}
Peut s'écrire comme:
condition ? do_something_if_condition_is_met : do_something_else_if_condition_is_not_met;
condition ? true
true
false
et ""
devrait tous être bien pour ignorer la partie else.
2 == 2 ? doSomething()
serait le même que celui if (2 == 2) doSomething()
?
: false
ou : ""
devrait être là car javascript s'y attend.
Pour info, vous pouvez composer des opérateurs conditionnels
var a = (truthy) ? 1 : (falsy) ? 2 : 3;
Si votre logique est suffisamment complexe, vous pouvez envisager d'utiliser un IIFE
var a = (function () {
if (truthy) return 1;
else if (falsy) return 2;
return 3;
})();
Bien sûr, si vous prévoyez d'utiliser cette logique plus d'une fois, vous devez l'encapsuler dans une fonction pour garder les choses agréables et SECHES.
La question n'est-elle pas essentiellement: puis-je écrire ce qui suit?
if (foo)
console.log(bar)
else
console.log(foo + bar)
la réponse est oui, ce qui précède se traduira.
cependant, méfiez-vous de ce qui suit
if (foo)
if (bar)
console.log(foo)
else
console.log(bar)
else
console.log(foobar)
assurez-vous de mettre du code ambigu entre accolades car ce qui précède lèvera une exception (et des permutations similaires produiront un comportement indésirable.)
en ligne si:
(('hypothesis') ? 'truthy conclusion' : 'falsey conclusion')
conclusion véridique: déclarations exécutées lorsque l'hypothèse est vraie
conclusion de falsey: déclarations exécutées lorsque l'hypothèse est fausse
votre exemple:
var c = ((a < b) ? 'a<b statements' : '!(a<b) statements');