Hallo
Wenn ich in der Argumentliste ein Objekt übergebe, kann ich das Argument optional machen oder z. B. vorbelegen mit NULL, wenn es nicht angegeben werden soll?
Wie dedlfix bereits schrieb, wird ein formaler Parameter für den beim Aufruf kein Argument übergeben wurde grundsätzlich mit dem Wert undefined initialisiert:
function f (x) {
console.log(typeof x);
}
f(); // undefined
Es genügt also im Prinzip, den optionalen Parameter ans Ende der Parameterliste zu setzen und dann innerhalb des Funktionskörpers zu prüfen, ob ein Wert übergeben wurde oder nicht.
Das hat allerdings den Nachteil, dass man in den Körper der Funktion hinein schauen muss, um zu erkennen, dass der Parameter optional ist. Darüber hinaus ergibt eine Prüfung der Eigenschaft length des Funktionsobjektes nicht das richtige Ergebnis:
function f (a, b) {
if (b == undefined) {
// do something without b
}
}
console.log(f.length); // 2
Obwohl der zweite Parameter in diesem Beispiel nicht zwingend gebraucht wird, sieht es von außen betrachtet so aus, als würde die Funktion zwei Parameter benötigen.
Besser wäre es, direkt in der Parameterliste einen Standardwert für den Parameter festzulegen, also zum Beispiel null, wobei als Wert ein beliebiger Ausdruck notiert werden kann.
function f (a, b = null) {
// do something with or without b
}
console.log(f.length); // 1
Wird die Funktion nur mit einem Argument aufgerufen, wird der zweite Parameter mit dem Wert null initialisiert. Zudem wird der optionale Parameter der Funktion bei der Berechnung des Wertes der Eigenschaft length nicht berücksichtigt.
Es ist nun auch von außen sichtbar, dass beim Aufruf der Funktion nur ein Argument übergeben werden muss; und selbst wenn man die Funktionsdefinition vor Augen hat, muss man nicht mehr im Körper der Funktion nachsehen, ob der zweite Parameter eventuell optional ist.
Gruß,
Orlok