Struppi: Standardwert für Funktionsvariable?

Beitrag lesen

Es geht nicht um unkreativ, der Frager wollte Wissen, wie man default Werte mit JS anlegt.

Was ich gezeigt habe - kompatibel zu JS 1.0. :-)

Und wie sieht es bei einem Leerstring aus?

Dann würde dein Alert auch ein "" zeigen. Denn x ist dann ja auch leer und nicht mehr undefiniert (bei typeof sollte es auch so sein).

Aber ein Leerstring ist unwahr. Das heißt mit deiner Variante kannst du x nicht mehr leermachen. Das Problem wenn du z.b. ein einen Inhalt eines Formularfelds leeren möchtest. zeigt deine Variante den Defaultwert an und keinen Leerstring.

Die sauberste Methode ist den Parameter mit typeof abfragen, da das genau das ist was der Frager Wissen wollte. Deine Lösung ist die Antwort auf die Frage, wie kann ich einen Wert vorbelegen, wenn der Parameter unwahr ist.

Und *genau das* wollte der Frager auch wissen (lies nochmal nach)! Meine Variante (OK, jedenfalls ergänzt mit der Abfrage x==0 - brauche ich selten, da mein Defaultwert i.d.R. 0 ist :)) entspricht *exakt* dem vom Frager als Refrenz genannten Verhalten von PHP.<img src="http://www.vampirehost.de/pzn/texte/img/znaika.gif" border="0" alt="">

Dann ist PHP in diesem Punkt fehlerhaft umgesetzt, was ich aber nicht glaube.

das Fragezeichen prüft ob eine ausdruck wahr ist und ein Ausdruck ist wahr, wenn er ungleich 0, null, kein Leerstring oder true ist, das sind aber alles definierte Werte, dass heißt es ist ein großer Unterschied ob du nur auf unwahr oder wahr prüfst, so wie du es machst oder auf definiert oder nicht definiert.

so sieht's aus. Mit deiner Variante hatte ich schon desöfteren Probleme, da ich meistens setter und getter Funktionen in einer nutze und ein Leerstring oder null fast immer gültige Werte für Parameter sind.

Dann ist der Fehler vielleicht woanders. Denn "meine" Variante funktioniert sowohl mit 0, als auch mit "" (sicherheitshalber eben nochmal getestet 8-)).

Nein  tut sie nicht.

Wenn du einen Wert auf 0, null oder einem Leerstring setzten willst, dann funktioniert sie nicht mehr. Und das kommt in der Praxis öfters vor. zumindest wenn mit Objekten arbeitest und dort eine Eigenschaft mit einem Leerstring belegen willst oder eine Unterobjekt auf null setzten, kannst du dies mit deiner Funktion  nicht mehr.

Insofern ist deine Varinate in vielen Fällen nützlich, deckt aber nicht alle Fälle ab, im gegensatz zu der typeof Variante.

Struppi.