function funktion(var0, var1, var2, var3, var4) {
if(arguments.length >= 5 && typeof arguments[5] != undefined) {
/* wird ausgeführt */
} else {
/* sollte normal ausgeführt werden */
}
}
funktion(argument0, argument1, argument2, argument3, argument4);
> Ich möchte einfach das wenn kein argument5 gesetzt wird dieses auch nicht in arguments.lenght gezählt wird.
Verwirrend das ist :-)
Was meinst Du mit "wenn kein argument5 gesetzt wird"? Zum einen ist die Formulierung schwamming, zum zweiten taucht "argument5" nirgends in den Parametern des Testaufrufs auf. Du machst Dir hier evtl. Dein Leben schwer, indem Du verschiedene Zählweisen miteinander mixt.
Nehmen wir mal an, Du meintest eigentlich den 5.ten Paramter, also: "wenn kein argument4 gesetzt wird". In Deinem Beispiel prüfst Du aber den Typ von "arguments[5]". In den mir bekannten Programmiersprachen werden Arrays aber nullbasiert indiziert, sprich: Du prüfst auf ein 6.tes Argument, was Deine Funktion überhaupt nicht entgegennimmt.
Also müsste er doch eigentlich in den else-Zweig springen? Leider nein, den typeof gibt Dir einen String "undefined" zurück, der ist aber "!=" der von Dir verwendeten Variablen(!) undefined (Anführungszeichen bewusst ausgelassen). Außer Du hättest irgendwo in Deinem Scope eine lokale Variable mit dem (String-)Wert "undefined" am Wickel.
Das Thema gehört tatsächlich zu den weniger schönen Seiten an JavaScript. Man könnte da noch einiges anführen, aber geh für den Moment vielleicht einfach mal von der Rückgabe von typeof von einem String aus und mach aus der [5] eine [4].