Сокращенное выражение if / else Javascript - PullRequest
40 голосов
/ 26 марта 2012

Мне интересно, есть ли более короткий способ написать это:

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

Сначала я попробовал x = y || 1, но это не сработало. Как правильно это сделать?

Ответы [ 5 ]

85 голосов
/ 26 марта 2012
var x = y !== undefined ? y : 1;

Обратите внимание, что var x = y || 1; назначит 1 для любого случая, когда y является ложным (например, false, 0, ""), что может быть причиной того, почему это "не работает" для тебя.Кроме того, если y является глобальной переменной, если она действительно не определена, вы можете столкнуться с ошибкой, если вы не обращаетесь к ней как window.y.


Как подсказывает vol7ron в комментариях, вы также можетеиспользуйте typeof, чтобы избежать необходимости ссылаться на глобальные переменные как window.<name>:

var x = typeof y != "undefined" ? y : 1;
18 голосов
/ 24 мая 2013

Другой способ написать это в ближайшее время

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

// is equivalent to

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

// and 

if (bePlanVar == false) {
    bePlanVar = true;
} else {
    bePlanVar = false;
}
3 голосов
/ 26 марта 2012
y = (y != undefined) ? y : x;

Скобки не нужны, я просто добавляю их, потому что думаю, что так легче читать.

2 голосов
/ 18 февраля 2016

Другой способ использует короткое замыкание:

x = (typeof y !== 'undefined') && y || 1

Хотя сам я думаю, что троичный более читабелен.

0 голосов
/ 02 августа 2017

Вот способ сделать это, который работает, но не может быть лучшей практикой для любого языка на самом деле:

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

альтернативно

undefined !== y && (x = y);
...