web-dev-qa-db-fra.com

Omettre la deuxième expression lors de l'utilisation du raccourci if-else

Puis-je écrire le raccourci if else sans le else?

var x=1;

x==2 ? dosomething() : doNothingButContinueCode();   

J'ai remarqué mettre null pour le reste (mais je ne sais pas pourquoi ni si c'est une bonne idée).

Edit: Certains d'entre vous semblent perplexes, pourquoi je m'embêterais à essayer cela. Soyez assuré que c'est purement par curiosité. J'aime jouer avec JavaScript.

278
Nikki

C'est aussi une option:

x==2 && dosomething();

dosomething() ne sera appelé que si x==2 est évalué à true. Cela s'appelle court-circuit .

Ce n'est pas couramment utilisé dans des cas comme celui-ci et vous ne devriez vraiment pas écrire un code comme celui-ci. J'encourage cette approche plus simple:

if(x==2) dosomething();

Vous devez écrire du code lisible à tout moment. si la taille du fichier vous inquiète, créez-en une version plus précise à l’aide d’un des nombreux compresseurs JS. (par exemple, Google Closure Compiler )

253
ajax333221

Ce que vous avez est une utilisation assez inhabituelle de opérateur ternaire . Habituellement, il est utilisé comme une expression, et non comme une déclaration, dans une autre opération, par exemple:

var y = (x == 2 ? "yes" : "no");

Donc, pour des raisons de lisibilité (parce que ce que vous faites est inhabituel), et parce que cela évite le "sinon" que vous ne voulez pas, je suggérerais:

if (x==2) doSomething();
734
Nicole

Une autre option:

x === 2 ? doSomething() : void 0;
61
Buzinas

Si vous ne faites pas le reste, pourquoi ne pas faire:

if (x==2) doSomething();
18
Prescott

Utiliser null convient pour l’une des branches d’une expression ternaire. Et une expression ternaire convient comme affirmation en Javascript.

Pour des raisons de style, cependant, si vous avez à l’esprit d’appeler une procédure, il est plus clair d’écrire ceci en utilisant if..else:

if (x==2) doSomething;
else doSomethingElse

ou, dans votre cas,

if (x==2) doSomething;
11
Ted Hopp

Un tout petit ajout à ce très, très vieux fil ..

Disons que vous êtes dans une boucle for et que vous devez évaluer une variable pour une valeur truthy/falsy avec un opérateur ternaire, alors que dans le cas où il s'agit de falsy, vous voulez continue - vous allez avoir un problème parce que vous ne retournez pas un expression, vous retournez à la place un déclaration sans aucune valeur.

Cela produira Uncaught SyntaxError: Unexpected token continue

 for (var i = 0; i < myArray.length; i++) {
      myArray[i].value ? alert('yay') : continue;
 }

Par conséquent, si vous souhaitez renvoyer une instruction tout en utilisant une seule ligne pour votre code, même si cela peut sembler un peu étrange à première vue et ne pas suivre une utilisation de langue stricte, vous pouvez le faire à la place:

  for (var i = 0; i < myArray.length; i++) {
      if (myArray[i].value) alert('yay') ; else continue;
  }
  • P.S - Ce code peut être difficile à lire ou à comprendre, il ne sera donc pas toujours la meilleure option à utiliser. Juste en train de dire .. :)
5
DotBot

Techniquement, mettre null ou 0, ou juste quelques valeurs aléatoires valeur fonctionne (puisque vous n'utilisez pas la valeur de retour). Cependant, pourquoi utilisez-vous cette construction au lieu de la construction if? Ce que vous essayez de faire lorsque vous écrivez du code de cette façon est moins évident, car vous risqueriez de confondre les personnes avec le no-op (null dans votre cas).

3
nhahtdh

Probablement le plus court

x-2||dosomething()
let x=1, y=2;
let dosomething = s=>console.log(s); 

x-2||dosomething('x do something');
y-2||dosomething('y do something');
1
Kamil Kiełczewski