Мне интересно, есть ли более короткий способ написать это:
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);