2012-03-20 2 views
1

В javascript У меня есть оператор if, и я хочу записать первое условие, которое по умолчанию было true. Например, если a === true, то я хочу: console.log a (обновление: например, «a» или «b» или «c», фактический символ).Как я могу найти, какое условие по умолчанию было верно?

Любые идеи?

if(a || b || c){ console.log(this) } 

Спасибо, ребята!

+2

Вы хотите зарегистрировать имена ('a',' b' или 'c') или значения этих переменных? –

ответ

4

Самое лучшее, что нужно сделать, это, конечно, use a debugger и осмотреть a, b и/или c, когда вы разветвляются в тело if инструкции. :-)

Делать это в коде, нет ярлыка, если вы на самом деле пытаетесь увидеть «а», «б» или «с»обновление чем я думал? Конечно, есть ярлык:

if(a || b || c){ 
    console.log(a ? "a" : b ? "b" : "c"); 
} 

Или, если вы хотите, чтобы увидеть значение, а также:

if(a || b || c){ 
    console.log(a ? "a: " + a : b ? "b: " + b : "c: " + c); 
} 

Live example | Live source


Оригинальная длинная версия:

if(a || b || c){ 
    if (a) { 
     console.log("a: " + a); 
    } 
    else if (b) { 
     console.log("b: " + b); 
    } 
    else { 
     console.log("c: " + c); 
    } 
} 

Или (и это довольно сложно и много больше, поэтому не рекомендуется):

if(a || b || c){ 
    switch (false) { 
     case !a: 
      console.log("a: " + a); 
      break; 
     case !b: 
      console.log("b: " + b); 
      break; 
     default: 
      console.log("c: " + c); 
    } 
} 

... который работает, потому что switch Оператор case s оценивается во время выполнения и в порядке.

+0

Есть ... мой. :) – gdoron

+0

@gdoron: Нет, я сказал, если он действительно хочет увидеть «a», «b» или «c» (фактические символы, а не те переменные с этими именами). –

+1

ваши примеры бесполезно проверяют состояние переменных дважды, вам не нужно иметь 'if (a || b || c)', ожидайте, что во втором примере вы предполагаете, что если a и b оба false c ДОЛЖНО быть правдой. – thecoshman

1
if (a) { 
    console.log(a); 
    console.log(this); 
} else if (b) { 
    etc... 
} else if (c) { 
    etc... 
} else { 
    ... profit? 
} 

Другой вариант, если вы не хотите, чтобы написать длинный, если/Then/Else цепь, чтобы набить значения, которые вы хотите проверить в массив, цикл по массиву, а затем войти/перерыв когда вы нажмете первое истинное значение.

0

Сохранить первый (если таковые имеются) истинная переменная, и использовать его:

var x = a || b || c ; 
if(x){ console.log(x) } 

EDIT: Чтобы прояснить путаницу:

var a, b, c; 
a = ""; 
b = null; 
c = "12"; 

var x = a || b || c; 

if (x) 
    alert(x);​ // Alerts "12" (and not "true"). 

Fiddle, чтобы показать, что вы получите Значение x, а не если x истинно или нет.

+0

-1 Как вы скажете, какая переменная сделана x реализована? –

+0

Это не что иное, вы просто переместили фактическую работу, если они верны вне 'if', и добавлены в переменную для кэширования этого результата. – thecoshman

+0

@PeterG .. Я знаю, что это ценность !!! это х! ** Яркий нисходящий я бы сказал! ** – gdoron

2

просто прорваться в цепь ifs.

if(a){ 
    // a is true, b and c unknown 
} else if(b){ 
    // a is false, b is true, c is unknown 
} else if (c){ 
    // a and b both false, c is true 
} else { 
    // a b and c all false 
} 

Вы можете, конечно, добавить к этому дополнительные условия, если хотите.

0

другой способ через символ подчеркивания.js

console.log(_.chain([a,b,c]).compact().first().value()) 
Смежные вопросы