Я интересно, если есть более короткий путь, чтобы написать это:Стенография, если/другое заявление Javascript
var x = 1;
if(y != undefined) x = y;
Первоначально я пытался x = y || 1
, но это не сработало. Каков правильный способ этого?
Я интересно, если есть более короткий путь, чтобы написать это:Стенография, если/другое заявление Javascript
var x = 1;
if(y != undefined) x = y;
Первоначально я пытался x = y || 1
, но это не сработало. Каков правильный способ этого?
var x = y !== undefined ? y : 1;
Обратите внимание, что var x = y || 1;
назначит 1
для любого случая, когда y
является falsy (например false
, 0
, ""
), который может быть, почему это «не работает» для вас. Кроме того, если y
является глобальной переменной, если она действительно не определена, вы можете столкнуться с ошибкой, если только вы не получите ее как window.y
.
Как vol7ron предлагает в комментариях, вы можете также использовать typeof
, чтобы избежать необходимости ссылаться на глобальные Варс, как window.<name>
:
var x = typeof y != "undefined" ? y : 1;
Yay для троичных операторов. Я попробую это. Редактировать: Ах, ладно. Как насчет «неопределенного»? Кажется, это не поймало этого. –
Что это значит? Строка '' undefined'' является истинным значением и не равна фактическому значению 'undefined'. – Amber
Я имел в виду, где переменная не была объявлена вообще. Я знаю, что строка «undefined» оценивается как логическая, но это не то, что я искал. –
y = (y != undefined) ? y : x;
Скобки не нужны, я просто добавить потому что я думаю, что читать это проще.
Ваши парнеры не сбалансированы (а также не нужны). – Amber
@Amber В тот момент, когда вы начинаете использовать сокращенную javscript-стенографию, вы уже говорите, что не заботитесь о читаемости, так зачем беспокоиться со сбалансированными parens ?. –
Другим способом написать его в ближайшее время
bePlanVar = !!((bePlanVar == false));
// is equivalent to
bePlanVar = (bePlanVar == false) ? true : false;
// and
if (bePlanVar == false) {
bePlanVar = true;
} else {
bePlanVar = false;
}
Другой путем, чем тройной, с помощью короткого замыкания:
typeof y !== 'undefined' && y || 1
Хотя я все еще думаю, что тройной более читаемым ...
Вот способ сделать это, который работает, но не может быть лучшей практикой для любого языка:
var x,y;
x='something';
y=1;
undefined === y || (x = y);
альтернативно
undefined !== y && (x = y);
Только что заметил, что это уже было поставлено @AndreFigueiredo – Nemesarial
'х = у || x' работает, если вы не заботиться о строгой ** неопределенного ** – Nemesarial