web-dev-qa-db-fra.com

Sténographie si/autre déclaration Javascript

Je me demande s'il existe 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 de s'y prendre?

40
Elliot Bonneville
var x = y !== undefined ? y : 1;

Notez que var x = y || 1; attribuerait 1 dans tous les cas où y est une fausseté (par exemple, false, 0, ""), ce qui peut expliquer pourquoi cela "n'a pas fonctionné" pour vous. De plus, si y est une variable globale, si elle n’est vraiment pas définie, vous risquez de rencontrer une erreur, à moins d’y accéder en tant que window.y.


Comme le suggère vol7ron dans les commentaires, vous pouvez également utiliser typeof pour éviter d'avoir à faire référence aux vars globaux en tant que window.<name>:

var x = typeof y != "undefined" ? y : 1;
84
Amber

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;
}
17
Hu3nn1
y = (y != undefined) ? y : x;

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

3
haltabush

Voici une façon de le faire qui fonctionne, mais qui peut ne pas être une bonne pratique pour les langues

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

alternativement

undefined !== y && (x = y);
0
Nemesarial