Hallo!
Für meine library habe ich eine fade-Funktion geschrieben, der man als
Parameter ein Objekt-Literal übergibt:
Z.B.:
{
repeat: 3,
sec: {
in: 1,
out: 3,
},
to: 50,
off: true
}
Nun möchte ich in der Funktion die übermittelten Werte der Objekt-Eigenschaften
überprüfen und ggf. default-Werte einsetzen:
fade : function( spec ) {
if ( !spec ) {
spec = { sec: {} };
} else {
if ( !spec.sec ) {
spec.sec = {};
}
}
var to = spec.to || 0
, off = spec.off ? 2 : 1
, rep = spec.repeat
, dur = spec.duration
, _on = spec.sec.on * 1000 || 2000
, _off = spec.sec.off * 1000 || 0
, _in = spec.sec.in * 1000 || 2000
, _out = spec.sec.out * 1000 || 2000;
// do stuff
}
Mein Hauptproblem bei einer solchen Wert-Zuweisung einer Variablen
( also var bla = spec.bla || blo ) ist, dass der logische Operator || eine
0 anscheinend als false wertet und wenn als Wert 0 übergeben wird
(z.B. { sec: { in: 0 } }), dann wird automatisch der default-Wert - in obigem Bsp. 2000 - gewählt.
Kann man das geschickt vermeiden, ohne viel mehr Zeilen durch Fallunterscheidungen mit isNaN oder typeof oder so hinzunehmen zu müssen?
2. Frage: Gibt es eine "bessere" Alternative für meine if-else-Abfrage ganz oben?
Damit ich nämlich so etwas wie var _on = spec.sec.on || 2 machen kann, muss
ja erstens spec und zweitens spec.sec existieren.
Hoffe, meine Problemdarstellungen sind verständlich,
vielen lieben Dank im Voraus für jede Antwort :)
Gruß