Tim Tepaße: Vorhandensein von Funktion überprüfen

Beitrag lesen

Hallo Mathias,

Gibt es irgendwo ein Dokumentation der Notation mit in?

SELFHTML kennt den Operator nur in Schleifen, Google Doctype hat kein Kapitel über Javascript als Sprache, Mozillas Wiki dagegen kennt und dokumentiert ihn.

Und gibt es Unterschiede bei der Ausführung?

Laut der ECMAScript-Spezifikation liefert "attr" in obj mit der Ausführung der dem Javascript-Interpreter eigenen Methode [[HasProperty]] immer direkt einen bool'schen Wert zurückgibt, obj.attr (und obj["attr"]) liefern eine Referenz auf ein Objekt zurück, das dann erst dereferenziert und mit der internen Funktion ToBoolean zu einem Bool'schen Wert abgebildet wird. Das ist nur minimalst mehr; ausser diesem Unterschied machen beide Notationen praktisch das gleiche; es wäre also größtenteils Geschmackssache.

Es gibt jedoch Grenzfälle: Mal angenommen window.property wäre kein Wasauchimmer-Objekt sondern eine Referenz auf undefined, null, eine Zahl, die Null oder NaN wäre oder auf einen leeren String. Im Falle von "property" in window würde das das erwünschte True liefern; schließlich exisiert die Eigenschaft von window. Boolean(window.property) dagegen würde False liefern – das referenzierte Objekt würde mit ToBoolean zu einem Wahrheitswert abgebildet und dieser evaluiert dann zu falsch. Das ist dann nicht das, was man eigentlich meinte. Das sind jedoch ziemliche Grenzfälle, in der normalen Nutzung ist das dann meistens ein Objekt oder eine Funktion, die zu True evaluieren.

(Ich privat habe eine kleine Bevorzugung des in-Operators, das kommt aber eher durch zuviel Python.)

Tim