Можете ли вы добавить условие к объявлению переменной?

Это не имеет смысла для меня, но у меня есть ощущение, что я видел код, используя это:

var abc = def || ghi;

Мой вопрос в том, действительно ли это? Можем ли мы добавить условие к объявлению переменной? Я думаю, что ответ - нет, но у меня есть это в глубине моего сознания, что я однажды увидел что-то подобное в коде.

Ответ 1

Это дает abc значение def, если оно не является ложным (т.е. не false, null, undefined, 0 или пустая строка), или значение ghi если нет.

Это эквивалентно:

var abc;
if (def) abc = def;
else abc = ghi;

Это обычно используется для опций:

function myfunc (opts) {
    var mything = opts.mything || "aaa";
}

Если вы вызываете myfunc({mything:"bbb"}), оно использует значение, которое вы даете. Он использует "aaa", если вы ничего не предоставляете.

В этом случае, чтобы позволить вызывающему пользователю полностью пропустить параметр, мы могли бы также запустить функцию с помощью

opts = opts || {};

Ответ 2

Код var abc = def || ghi;

- это то же самое, что и

if (def) { //where def is a truthy value
   var abc = def;
} else {
   abc = ghi;
}

Вам нужно условие вроде оператора if?

if (xxx==="apple") { 
    var abc = def;
} else {
    abc = ghi;
}

который, как указано в тройном операторе, равен:

var abc = (xxx==="apple") ? def : ghi;

Ответ 3

Да, вы можете добавить условие к объявлению переменной

Вы можете использовать его так:

function greet(person) {
    var name = person || 'anonymouse';
    alert('Hello ' + name);
}
greet('jashwant');
greet();​

jsfiddle demo

Ответ 4

ОК, видите, это что-то вроде, вы либо проверяете, является ли это правдой. Истинный будет возвращен.:)

var abc = def || ghi;

Является эквивалентным:

var abc = return (def == true) or (ghi == true)