При использовании undefined в качестве логического (булевого) значения (true / false), как в операторах if, оно воспринимается как false.

Поэтому, если arg4 не был передан в приведенном выше примере, то он является undefined и тело оператора if не выполняется.

Как быть, когда трудно определить, сколько потребуется аргументов? Можно иметь функцию, которая получает от 1 до n аргументов и выполняет с каждым из них одну и ту же задачу. На этот случай JavaScript имеет в каждой функции объект arguments. Объект arguments содержит все аргументы функции:


function myFunction(){ for(var i=0; i<arguments.length; i++){ alert(arguments[i].value); }}


Этот код сообщит значение всех переданных ему объектов. Если передать 100 объектов, то будет получено 100 сообщений. Более полезной функцией было бы, возможно, скрытие/вывод всех переданных функции объектов.

Один из наиболее интересных аспектов JavaScript - идея о том, что функции являются объектами и могут передаваться как поле ввода, изображение или что-то еще, что может быть. Посмотрите, например, следующий код:


<script type="text/javascript">function multiply(){ var out=1; for(var i=0; i<arguments.length; i++){ out *= arguments[i]; } return out;}function add(){ var out=0; for(var i=0; i<arguments.length; i++){ out += arguments[i]; } return out;}function doAction(action){ alert(action(1, 2, 3, 4, 5));}</script><button onclick="doAction(multiply)">Test Multiply</button><button onclick="doAction(add)" >Test Add</button>Test Multiply Test Add


В этом небольшом фрагменте кода происходит очень многое. Вначале просто определяют две функции: multiply и add. Функция multiply просто перемножает все переданные ей числа. Аналогично, функция add складывает все переданные ей числа.



19 из 105