Jeśli co.chkShowRSB jest fałszywy, jaki jest oczekiwany wynik? Spodziewałbym się, że będzie fałszywy, ale czy to jest sposób, w jaki działa? I dlaczego?

var test = chkShow:co.chkShowRSB || true;

0
Arlen Beiler 26 wrzesień 2012, 14:38

4 odpowiedzi

Najlepsza odpowiedź

OK, więc masz teraz zdjęcie x = false || true; przypisuje prawdziwe. Dlaczego? Jest całkiem łatwe wiedząc, że użycie operatora zwarciowego jest taka sama jak:

x = (false ? false : true);

Jednak w większości używany do ustawiania wartości domyślnych dla argumentów funkcyjnych, więc zgaduję, że zakładasz x, aby otrzymać drugie operand, jeśli pierwszy undefined. Nie ma sposobu, aby odfiltrować niezdefiniowane wartości wyłącznie, z wyjątkiem wyraźnie sprawdzania ich. Następnie powinieneś użyć:

x = val === undefined ? defaultVal : val;

Lub, ponieważ undefined nie musi być undefined i chcesz być absolutnie na pewno:

x = (function(val,undefined)//second argument will be the true undefined value
{
    return (val === undefined ? defaultVal : val);
})(val);//don't pass second argument
0
Elias Van Ootegem 26 wrzesień 2012, 10:48

Jest true w twoim przypadku, jak true jest drugim operandem || (tak zwanego operatora "zwornego lub"). Wspólna zasada jest ...

var x = a || b; // = a (and b won't be evaluated), if it's a truthy value, b otherwise
var y = a && b; // = a (and b won't be evaluated), if it's a falsy value, b otherwise.
1
raina77ow 26 wrzesień 2012, 10:39
false || true 

Jest prawdziwy. Nie ma przypadku, gdy kadencja boolowska z "lub prawdą" może być fałszywa.

1
Philipp 26 wrzesień 2012, 10:40

Powinieneś użyć operatora trzeciorzędnego. Twój kod będzie zawsze zwrócił prawdą, jeśli CHKshow: Co.chkshowrsb jest boolowska;

var test =  chkShow:co.chkShowRSB == false ? false : true;
0
Anoop 26 wrzesień 2012, 10:41