Raccourci if / else déclaration Javascript

Je me demande s'il y a un moyen plus court d'écrire ceci:

var x = 1;
if(y != undefined) x = y;

J'ai d'abord essayé x = y || 1, mais cela n'a pas fonctionné. Quelle est la bonne façon d'aller à ce sujet?

37
demandé sur Elliot Bonneville 2012-03-26 02:24:31

5 réponses

var x = y !== undefined ? y : 1;

Notez que {[2] } affecterait 1 pour tout cas où y est faux (par exemple false, 0, ""), ce qui peut être la raison pour laquelle cela "n'a pas fonctionné" pour vous. En outre, si y est une variable globale, si elle n'est vraiment pas définie, vous pouvez rencontrer une erreur sauf si vous y accédez en tant que window.y.


, Comme vol7ron suggère dans les commentaires, vous pouvez aussi utiliser typeof pour éviter la nécessité de consulter les variables globales comme window.<name>:

var x = typeof y != "undefined" ? y : 1;
76
répondu Amber 2012-03-25 23:13:36

Une autre façon de l'écrire sous peu

bePlanVar = !!((bePlanVar == false));

// is equivalent to

bePlanVar = (bePlanVar == false) ? true : false;

// and 

if (bePlanVar == false) {
    bePlanVar = true;
} else {
    bePlanVar = false;
}
16
répondu Hu3nn1 2013-05-23 20:02:51
y = (y != undefined) ? y : x;

Les parenthèses ne sont pas nécessaires, je les ajoute simplement parce que je pense que c'est plus facile à lire de cette façon.

3
répondu haltabush 2012-03-25 22:26:43

Autre manière que ternaire, en utilisant un court-circuit:

typeof y !== 'undefined' && y || 1

Bien que je pense toujours ternaire plus lisible...

1
répondu Andre Figueiredo 2016-02-18 02:40:46

Voici une façon de le faire qui fonctionne, mais peut ne pas être la meilleure pratique pour n'importe quelle langue:

var x,y;
x='something';
y=1;
undefined === y || (x = y);

Sinon

undefined !== y && (x = y);
0
répondu Nemesarial 2017-08-02 08:36:25