Hi,
Tut mir leid, wenn ich vor lauter Perlen nicht mehr so fit in JS bin. Wenn ich in Perl in einer sub schreibe:
my $somewhat = shift || myOtherSub();
wird entweder der Wert von der Übergabe (shift vom @_) oder eben das, was »myOtherSub« als Rückgabewert bereit hält.
Ich dachte, dass:
var xy = foo || bar;
in JS genauso gehandhabt wird, dass wenn "foo" nicht existiert eben "bar" genommen wird,
Ja, dem ist durchaus so.
(Genauer natuerlich: Wenn der Ausdruck, den foo darstellt, zu false evaluiert wird.)
was anscheinend nicht der Fall ist. Denn wenn "foo" schon falsch ist, wird in JS gar nicht nach der Alternative "bar" geprüft sondern mit einer Fehlermeldung abgebrochen...?
Nein,
var xy = foo.abc || bar.def;
ist hier der problematische Fall.
Wenn es gar kein foo gibt, *dann* gibt der Versuch auf dessen Eigenschaft abc zuzugreifen, einen Fehler und damit Abbruch.
Wenn ich dich frage, ob dein Hund ("Objekt") auf meinen Rasen gekackt hat ("Eigenschaft") - dann reagierst du vermutlich ziemlich angepisst ("Fehlermeldung"), wenn eben dieser letzte Woche vom Auto ueberfahren wurde.
Deshalb frage ich dich natuerlich erst mal, wie's deinem niedlichen kleinen Pinscher den so geht - und kann mir dann gegebenenfalls die Frage, ob er auf meinen Rasen geschissen hat, verkneifen ...
MfG ChrisB