librarian: Objekt-Literal als Param übergeben -Problem bei Abfrage d. props

Beitrag lesen

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ß