2014-10-21 4 views
0

Рассмотрим переменную master, которая может быть true или false, никогда ничего.Проверка boolean по умолчанию

Рассмотрим другую переменную override, которая может быть undefined, true или false.

Итак, как определить, какую переменную использовать, если override не является undefined, тогда используйте это в противном случае, используя master.

Может быть, мы могли бы сделать:

if ((master !== undefined && master) || override) then 
    ... 

Но это правильно, а также есть ли лучший способ?

+0

Возможный ответ: http://stackoverflow.com/questions/3390396/how-to-check-for-undefined-in-javascript –

ответ

1

Вы сказали, что:

  • master может быть только true или false
  • override может быть true, false или undefined
  • если override не undefined затем использовать его

Так правильный код будет:

if (typeof override !== "undefined" ? override : master) { 
    // use override 
} else { 
    // use master 
} 
1
if(typeof override !== "undefined" ? override : master) 

Это нетрадиционное использование троичного оператора, но это именно то, что вы хотите:

Если override определена, используйте его. В противном случае используйте master. Если выбран один true, то ...

0

Что-то, как это должно работать для вас

if ((override === undefined && master) || (override !== undefined && override)) { 
    ... 
} 
0

Подобно тому, что сказал Niet, но я думаю, что это ясно, чтобы сохранить его в переменной.

var _set = (typeof override !== 'undefined' ? override : master); 

if (_set) { 
    ... 
} 
0

Я бы сделал это таким образом, что станет более понятным и понятным для чтения.

var usethis; 
if (typeof override != 'undefined') { 
    usethis = override; 
} else { 
    usethis = master; 
} 

if (usethis) { 
    // Enable feature X 
} 

Вы первый чек, если переменная override определенно: если это так, мы будем использовать это значение, в противном случае вернется к хозяину. Затем вы фактически используете значение для включения функции (я полагаю, это ваш прецедент).

Если вы хотите, вы можете написать, что в этом более компактном виде:

var usethis = typeof override != 'undefined' ? override : master; 

if (usethis) { 
    // Enable feature X 
} 

вас есть использовать оператор typeof, в противном случае типа принуждения будет отбрасывать переменную override на логическое значение, и вы не пропустите значение false.

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