Когда функция вызывается с меньшим количеством аргументов, чем описывается в определении, недостающие аргументы получают значение undefined. Иногда бы_ вает удобным учесть необязательность некоторых аргументов – тех, которые мо_ гут быть опущены при вызове функции. В этом случае желательно предусмотреть возможность присваивания по умолчанию достаточно разумных значений аргу_ ментам, которые были опущены (или переданы со значением null). Например:
// Добавить в массив a перечислимые имена свойств объекта o и вернуть массив a.
// Если массив a не указан или равен null, создать и вернуть новый массив a function copyPropertyNamesToArray(o, /* необязательный */ a) {
if (!a) a = []; // Если массив не определен или получено
// значение null, создать новый пустой массив a for(var property in o) a.push(property);
return a;
}
Когда функция определена таким образом, появляются более широкие возмож_ ности обращения к ней:
// Получить имена свойств объектов o
и p
var a = copyPropertyNamesToArray(o);
// Получить свойства объекта o
//
в виде нового массива
copyPropertyNamesToArray(p,a);
//
добавить к массиву свойства объекта p
Вместо инструкции if в первой строке этой функции можно использовать опера_ тор || следующим образом:
a = a || [];
В главе 5 уже говорилось, что оператор || возвращает первый аргумент, если он равен true или преобразуется в логическое значение true. В противном случае возвращается второй аргумент. В данном случае он вернет a, если переменная a определена и не содержит значение null даже в том случае, если a – это пустой массив. В противном случае он вернет новый пустой массив.
Обратите внимание: при объявлении функций необязательные аргументы долж_ ны завершать список аргументов, чтобы их можно было опустить. Программист, который будет писать обращение к вашей функции, не сможет передать второй аргумент и при этом опустить первый. В этом случае он вынужден будет явно пе_ редать в первом аргументе значение undefined или null.