Сокращенное выражение if/else Javascript
Мне интересно, есть ли более короткий способ написать это:
var x = 1;
if(y != undefined) x = y;
Сначала я попробовал x = y || 1
, но это не сработало. Каков правильный способ сделать это?
Ответы
Ответ 1
var x = y !== undefined ? y : 1;
Обратите внимание, что var x = y || 1;
присваивает 1
для любого случая, когда y
является ложным (например, false
, 0
, ""
), что может быть, поэтому оно "не работает" для вас, Кроме того, если y
является глобальной переменной, если она действительно не определена, вы можете столкнуться с ошибкой, если только вы не получите ее как window.y
.
Как предлагает vol7ron в комментариях, вы также можете использовать typeof
, чтобы избежать необходимости ссылаться на глобальные vars как window.<name>
:
var x = typeof y != "undefined" ? y : 1;
Ответ 2
Еще один способ быстро записать его
bePlanVar = !!((bePlanVar == false));
// is equivalent to
bePlanVar = (bePlanVar == false) ? true : false;
// and
if (bePlanVar == false) {
bePlanVar = true;
} else {
bePlanVar = false;
}
Ответ 3
y = (y != undefined) ? y : x;
Скобки не нужны, я просто добавляю их, потому что мне легче читать этот путь.
Ответ 4
Другой путь, чем тройной, с использованием короткого замыкания:
typeof y !== 'undefined' && y || 1
Хотя я все еще думаю, что троянец более читабельен...
Ответ 5
Вот способ сделать это, который работает, но не может быть лучшей практикой для любого языка:
var x,y;
x='something';
y=1;
undefined === y || (x = y);
в качестве альтернативы
undefined !== y && (x = y);