2012-03-25 4 views
35

Я интересно, если есть более короткий путь, чтобы написать это:Стенография, если/другое заявление Javascript

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

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

+0

'х = у || x' работает, если вы не заботиться о строгой ** неопределенного ** – Nemesarial

ответ

73
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; 
+0

Yay для троичных операторов. Я попробую это. Редактировать: Ах, ладно. Как насчет «неопределенного»? Кажется, это не поймало этого. –

+0

Что это значит? Строка '' undefined'' является истинным значением и не равна фактическому значению 'undefined'. – Amber

+0

Я имел в виду, где переменная не была объявлена ​​вообще. Я знаю, что строка «undefined» оценивается как логическая, но это не то, что я искал. –

3
y = (y != undefined) ? y : x; 

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

+3

Ваши парнеры не сбалансированы (а также не нужны). – Amber

+0

@Amber В тот момент, когда вы начинаете использовать сокращенную javscript-стенографию, вы уже говорите, что не заботитесь о читаемости, так зачем беспокоиться со сбалансированными parens ?. –

13

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

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

// is equivalent to 

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

// and 

if (bePlanVar == false) { 
    bePlanVar = true; 
} else { 
    bePlanVar = false; 
} 
1

Другой путем, чем тройной, с помощью короткого замыкания:

typeof y !== 'undefined' && y || 1

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

0

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

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

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

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

Только что заметил, что это уже было поставлено @AndreFigueiredo – Nemesarial

Смежные вопросы