Comment puis-je utiliser une ifinstruction inline en JavaScript? Existe-t-il également une elsedéclaration en ligne ?
Quelque chose comme ça:
var a = 2;
var b = 3;
if(a < b) {
// do something
}
Comment puis-je utiliser une ifinstruction inline en JavaScript? Existe-t-il également une elsedé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 cvariable sera minorsi la valeur est true, et majorsi 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.
ifdé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 bsera é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 aet que les bdeux é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 falseet ""devrait tous être bien pour ignorer la partie else.
2 == 2 ? doSomething()serait le même que celui if (2 == 2) doSomething()?
: falseou : ""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');