Как я могу найти, какое условие по умолчанию соответствует истине? - PullRequest
1 голос
/ 20 марта 2012

В javascript у меня есть оператор if, и я хочу записать первое условие, которое по умолчанию имеет значение true.Например, если a === true, то я хочу console.log a ( update : например, "a" или "b" или "c", фактический символ).

Есть идеи?

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

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

Ответы [ 5 ]

4 голосов
/ 20 марта 2012

Лучше всего, конечно, использовать отладчик и проверять a, b и / или c при переходе в тело оператора if.: -)

Делая это в коде, нет ярлыка, если вы действительно пытаетесь увидеть "a", "b" или "c" update о чем я только думал?Конечно, есть ярлык:

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);
}

Живой пример | Живой источник


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

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 вычисляется во время выполнения и по порядку.

2 голосов
/ 20 марта 2012

просто вырваться в цепочку 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
}

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

1 голос
/ 20 марта 2012
if (a) {
   console.log(a);
   console.log(this);
} else if (b) {
   etc...
} else if (c) {
   etc...
} else {
   ... profit?
}

Другой вариант, если вы не хотите записывать длинную цепочку if / then / else, - это вставить значения, которые вы хотите проверить, в массив, выполнить цикл по массиву, а затем записать / прервать, когдавы нажали первое истинное значение.

0 голосов
/ 21 марта 2012

другой путь через underscore.js

console.log(_.chain([a,b,c]).compact().first().value())
0 голосов
/ 20 марта 2012

Сохраните первую (если есть) истинную переменную и используйте ее:

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

РЕДАКТИРОВАТЬ: Чтобы устранить путаницу:

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 истинно или нет.

...