Hallo
[…] Angenommen this.property hätte true als Default-Wert und du möchtest ihn per Konstruktor-Parameter mit false überschreiben, dann geht das nicht, weil deine Bedingung if (val) nie wahr wird. Mit if (val !== undefined) kann man auch diesen Fall abdecken.
Die Abkürzung mit Prüfung auf truthy- oder falsy-Werte ist legitim, man muss nur genau wissen, wann man sie einsetzen kann und wann nicht. […]
ACK. Naja, mein Ziel war es hier, in möglichst abstrakter und vor allem einfacher Form die Frage zu beantworten, wie das Beispiel von Felix funktioniert, ohne aber dabei zuweit vom Kern der Sache abzuschweifen, das heißt, das eingebaute if
-Statement stand hier stellvertretend für eine an den konkreten Einzelfall angepasste Prüfung. Aber darauf hätte ich wahrscheinlich etwas deutlicher hinweisen sollen. ;-)
Und es ist auch besser, sich nicht mit 10 oder 20 Wiederholungen einen abzubrechen, sondern stattdessen über ein Array mit den erlaubten Eigenschaftennamen zu iterieren. Damit tritt auch das truthy/falsy-Problem nicht auf.
Ja, aber allgemeingültig ist diese Variante genauso wenig wie meine, denn hier prüfst du ja nur, ob dem Objekt eine entsprechende Eigenschaft mitgegeben wurde, aber nicht, welchen Wert die Eigenschaft hat. Das wäre also nur dann eine Option, wenn die entsprechende Prüfung bereits an anderer Stelle vorgenommen wurde.
Gruß,
Orlok